SpringCloudAlibaba学习(解决SpringBoot初始化以及Nginx启动出错问题)

微服务强调每个服务都是单独的数据库,在不使用微服务的情况下可以采用分布式架构,通过Template来调用远程的接口,但这种方式维护起来很麻烦,而且有很多弊端。

一、环境搭建

1、首先搭建SpringBoot框架

使用Spring Initializar快速搭建SpringBoot框架时可能会遇到访问超时的问题。此问题有两种解决的办法:

①将服务源改成https://start.aliyun.com,这种方法是采用alibaba的springboot架构模型,会和常规的模型有出入。(这种方法有的时候搭建出来没有pom文件,不能被识别为maven项目,这种情况采用第二种方法即可)
②将服务源改成http://start.springboot.io,这种方式是采用传统的springboot架构模型,只是这个是国内源。

SpringCloud的学习结合:https://spring.io/projects/spring-cloud-alibabahttps://github.com/alibaba/spring-cloud-alibaba/wiki进行学习

依赖版本说明:

SpringCloudAlibaba学习(解决SpringBoot初始化以及Nginx启动出错问题)

因为我使用的Nacos版本是2.0.0的,所以SpringCloud版本选用2.2.7.RELEASE,相应的SpringBoot的版本采用2.3.12.RELEASE

1、首先添加SpringCloudAlibaba依赖
//将依赖放在dependencyManagement中继承该父项目的子类必须显示的声明才能使用。
//一般都会采用这种方式来继承一个版本管理器,因为

二、注册中心Nacos

1、单机模式
①搭建分布式架构,通过分布式架构来搭建微服务架构
通过RestTempate来实现调用远程的rest接口
首先添加RestTemplate的配置类
@Bean
public RestTemplate restTemplate(RestTemplateBuilder builder){
RestTemplate restTemplate = builder.build();
return restTemplate;
}
然后调用restTemplate的方法:getforObject(),通过传入微服务的服务名和返回值类型来实现远程接口的调用。
②启动 进入到nacos的bin目录,在cmd中运行 startup -m standalone
③复制输出的网址到浏览器进行访问 默认账号和密码都是nacos
④在每个微服务(子SpringBoot项目)中加入nacos依赖

④在配置文件中配置nacox

应用名称,nacos会把它当做是服务名称

spring:
application:
name: order-service
cloud:
nacos:
server-addr: ip:8848
discovery:
username: nacos
password: nacos

命名空间,用于拆分服务(可以将服务拆分为生产环境和测试环境)

namespace: public

⑤这时候服务注册与发现就会自动将我们的服务注册到nacos注册中心
⑥此时直接在浏览器访问的话会报404错误,是因为nacos的执行原理是依赖负载均衡器来调用微服务的。此时只需要在RestTemplate的配置类上加入注解@LoadBalanced即可为服务端配置负载均衡。(该负载均衡采用的是轮询机制)即:
@Bean
@LoadBalanced
public RestTemplate restTemplate(RestTemplateBuilder builder){
RestTemplate restTemplate = builder.build();
return restTemplate;
}

nacos执行原理:

SpringCloudAlibaba学习(解决SpringBoot初始化以及Nginx启动出错问题)

创建永久实例:通过:spring.cloud.nacos.discovery.ephemeral: false 哪怕宕机了也不会删除实例

2、集群模式部署nacos
①修改application.properties文件,修改端口号,数据源使用mysql,修改mysql数据库的连接参数
②修改cluster.conf.example文件(现将其拷贝一份,然后将名字修改为cluster.conf)
③修改startup文件,将占用内存修改小一点。
④安装Nginx并启动,第一次启动可能会一闪而过,这时查看日志,如果有错误则修改监听端口,如果没错误则说明启动成功(windows启动Nginx本身就是一闪而过)
在启动之前还应该加入(Nginx是最常见的软件负载均衡)
upstream nacoscluster{
server ip:8849;
server ip:8851;
server ip:8860;
}
及修改
location /nacos/{
proxy_pass http://nacoscluster/nacos/;
}

⑤将application.yml中的服务器地址改为Nginx的地址启动即可

三、微服务负载均衡器Ribbon
内置很多负载均衡的策略,我们可以通过覆盖掉这些配置,有两种方式:
1、通过配置类的方式进行修改
①新建一个Ribbon的配置类,注意该配置类不能放在扫描包能扫到的位置,要不然会冲突
@Configuration
public class RibbenRandomRuleConfig {
/方法名一定要叫这个/
@Bean
public IRule iRule(){//IRule是所有负载均衡策略的父接口
return new RandomRule();
}
}

在启动类上加上注解:
@RibbonClients(value = {
@RibbonClient(name = “stock-service”,configuration = RibbenRandomRuleConfig.class)

2、通过配置文件的方式进行修改

权重

stock-service:
ribbon:
NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule

Spring Cloud LoadBalancer:是Spring Cloud官方自己提供的客户端负载均衡器,用于替代Ribbon
使用:
①首先设置Ribbon为禁用,或者在依赖中排除Ribbon(建议使用依赖排除)

在配置中加入:
spring:
cloud:
loadbalancer:
ribbon:
enable: false
②定义配置类,配置Bean,定义自己的负载均衡策略。
③在启动类上加注解@LoadBalancerClients(),使用方法和Ribbon相同,只是注解不同。

Original: https://www.cnblogs.com/yuhouwen/p/16442817.html
Author: 厚文专属博客
Title: SpringCloudAlibaba学习(解决SpringBoot初始化以及Nginx启动出错问题)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/588744/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • kafka_2.12-2.2.1 集群搭建

    一、zookeeper集群搭建 kafka集群依赖于zookeeper的集群,搭建zookeeper集群的步骤参考我之前写过的,Solr集群搭建详细教程(一)中的第二步 二、下载解…

    Java 2023年6月9日
    0100
  • rocketmq学习之-基本样例

    1 基本样例 在基本样例中我们提供如下的功能场景: 使用RocketMQ发送三种类型的消息:同步消息、异步消息和单向消息。其中前两种消息是可靠的,因为会有发送是否成功的应答。 使用…

    Java 2023年6月5日
    0117
  • HttpClient 在vivo内销浏览器的高并发实践优化

    作者:vivo 互联网服务器团队- Zhi Guangquan HttpClient作为Java程序员最常用的Http工具,其对Http连接的管理能简化开发,并且提升连接重用效率;…

    Java 2023年6月15日
    081
  • spring*.xml配置文件明文加密

    系统架构:spring+mvc(Oracle是用jdbc自己封装的接口) 1.数据库配置文件加密 原xml配置 ….. 加密实现过程 思路:继承DruidDataSource,…

    Java 2023年6月8日
    089
  • 随机生成数组+冒泡排序

    示例如下: public class MaoPaoPaiXu { public static int[] mp(int[] nums) { for (int i = 0; i &l…

    Java 2023年6月6日
    0125
  • java.util.function 中的 Function、Predicate、Consumer

    函数式接口: 函数式接口(Functional Interface)就是一个有且仅有一个抽象方法,但可以有多个非抽象方法的接口。 函数式接口可以被隐式转换为 Lambda 表达式。…

    Java 2023年5月29日
    096
  • Spring boot 注意问题 !!

    1,lombok在pom文件中需要引入正确版本,否则会导致maven的complier无法正常导入!!, 当前正确配置: java;gutter:true;org.projectl…

    Java 2023年5月30日
    085
  • Spring Boot 2.7.0发布,2.5停止维护,节奏太快了吧

    这几天是Spring版本日,很多 Spring工件都发布了新版本, Spring Framework 6.0.0 发布了第 4 个里程碑版本,此版本包含所有针对 5.3.20 的修…

    Java 2023年5月30日
    097
  • security

    认证流程 导入依赖 org.springframework.boot spring-boot-starter-security 2.6.8 导入spring-boot-starte…

    Java 2023年6月13日
    069
  • 数据库的多表查询

    我们知道,增删查改这几种操作在开发过程中不可或缺,下面重点介绍的是查询操作 在数据库中,80%的操作是通过查询完成的.在实际开发中能中,不可能只会用到一张表,多表查询在查询中起很大…

    Java 2023年6月8日
    0102
  • JAVA_AesCBC例子

    java;gutter:true; import javax.crypto.Cipher; import javax.crypto.spec.IvParameterSpec; im…

    Java 2023年5月29日
    084
  • idea打包java可执行jar包

    1,在项目上鼠标右键 –> Open Module Settings 2, Artifacts –> + –> JAR &#8…

    Java 2023年5月29日
    097
  • MySQL八:读懂MVCC多版本并发控制

    转载~ mysql在并发的情况下,会引起脏读,幻读,不可重复读等一系列的问题,为解决这些问题,引入了mvcc的机制。本文就详细看看mvcc是怎么解决脏读,幻读等问题的。 1、 数据…

    Java 2023年6月8日
    091
  • MyBatis与MyBatis-plus的区别

    一、MyBatis MyBatis前身是iBatis,是Clinton Begin在2001年发起的一个开源项目。最初侧重于码软件开发,后续发展成为一款基于java的持久层框架。M…

    Java 2023年5月30日
    088
  • 高可用架构(上)

    1. 背景 在学习完各种高性能发实现方案后,就需要对三大复杂度一直的高可用进行开刀了,在高可用方面主要有哪些东西是我们需要考虑的呢?接下来将从三个方面逐一分析。 2. 理论 在设计…

    Java 2023年6月15日
    081
  • 安装RocketMQ出现问题找不到主类

    解决:1、确定安装路径没有空格 2、去修改下面文件 确定这里有双引号 posted @2022-07-31 18:20 大大怪下士 阅读(37 ) 评论() 编辑 Original…

    Java 2023年6月9日
    087
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球