1.nacos
1.安装 nacos
下载地址
: https://github.com/alibaba/nacos/releases
下载
zip
格式的安装包,然后进行解压缩操作
2.
启动
nacos
![](https://img-blog.csdnimg.cn/20210707151220279.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3lqcV9qYXZheHg=,size_16,color_FFFFFF,t_70)
3.访问 nacos
打开浏览器输入
http://localhost:8848/nacos
,即可访问服务, 默认密码是
nacos/nacos
![](https://img-blog.csdnimg.cn/2021070715135447.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3lqcV9qYXZheHg=,size_16,color_FFFFFF,t_70)
4.将商品和订单都微服务注册到 nacos
引入注册中心的依赖(全部版本号在父工程的pom.xml已配置)
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
在主启动类上添加 nacos 的开启注解
在 application.yml 中添加 nacos 服务的地址,并为微服务起名称
商品:
订单:
5.启动服务, 观察 nacos 的控制面板中是否有注册上来的商品和订单的微服务
6.修改 OrderController 中的代码
2.实现服务调用的负载均衡
1.自定义实现负载均衡
2.通过 idea 再启动一个 shop-product 微服务,设置其端口为 8082
3.启动创建的项目,通过 nacos 查看微服务的启动情况
4.修改 shop-order 的代码,实现负载均衡(随机)
5,启动两个服务提供者和一个服务消费者,多访问几次消费者测试效果
3.基于 Ribbon 实现负载均衡 ---组件
Ribbon 是 Netflix 发布的一个负载均衡器,Ribbon 自动的从注册中心中获取服务提供者的 列表信息,并基于内置的负载均衡算法,请求服务。
Ribbon
的主要作用:
(
1
)服务调用
基于
Ribbon
实现服务调用, 是通过拉取到的所有服务列表组成(服务名
-
请求路径的)映射关系。
借助 RestTemplate 最终进行调用。
(
2
)负载均衡
当有多个服务提供者时,
Ribbon
可以根据负载均衡的算法自动的选择需要调用的服务地址,Ribbon 是
Spring Cloud
的一个组件, 它可以让我们使用一个注解就能轻松的搞定负载均衡。
1.
在
RestTemplate
的生成方法上添加
@LoadBalanced
注解
![](https://img-blog.csdnimg.cn/20210707160905499.png)
2.
修改服务调用的方法 (轮流交替)
![](https://img-blog.csdnimg.cn/20210707161606788.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3lqcV9qYXZheHg=,size_16,color_FFFFFF,t_70)
我们可以通过修改配置来调整
Ribbon
的负载均衡策略,(随机负载均衡)具体代码如下:
![](https://img-blog.csdnimg.cn/2021070716200414.png)
4.基于 OpenFeign 实现服务调用
Feign 是 Spring Cloud 提供的一个声明式的伪 Http 客户端,它使得调用远程服务就像调用本地服务一样简单, 只需要创建一个接口并添加一个注解即可。
Nacos 很好的兼容了 Feign, Feign 负载均衡默认集成了 Ribbon, 所以在 Nacos 下使用 Fegin 默认就实现了负载均衡的效果。
1.在shop-order的pom
加入
Fegin
的依赖
<!--feign的ja文件--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency>
2.在主启动类上加入开启 feign 的注解
@EnableFeignClients //开启 feign 的注解
3.
创建 feign 的接口 ( feign.ProductFeign )
![](https://img-blog.csdnimg.cn/20210707163505788.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3lqcV9qYXZheHg=,size_16,color_FFFFFF,t_70)
4.
修改
OrderController
的代码
![](https://img-blog.csdnimg.cn/20210707163920131.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3lqcV9qYXZheHg=,size_16,color_FFFFFF,t_70)
5.
重启
order
微服务
,测试
查看效果(随机)
5.使用 eureka 作为注册中心
Eureka
是
Netflix
开发的服务发现框架,
SpringCloud
将它集成在自己的子项目
spring-cloud-netflix
中
,
实现
SpringCloud
的服务发现功能。
1.创建一个
eureka
服务端
![](https://img-blog.csdnimg.cn/20210707193457603.png)
2.
在
eureka
服务端引入相关的依赖
<dependencies> <!--eureka-server--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> <optional>true</optional> </dependency> </dependencies>
3.书写application.yml配置类
4.书写主启动类
然后运行主启动类,在浏览器打开eureka
5.在shop-product的application.yml进行添加配置(注册shop-product)
6.在shop-product的pom添加eureka的依赖
7.刷新eureka
说明注册shop-product成功