1.服务治理介绍
1.1什么是服务治理?
服务治理可以说是微服务架构中最为核心和基础的模块,它主要是对微服务的实例进行管理,有如下几个功能:
服务注册:在服务治理框架中,会构建一个注册中心,服务提供者会向注册中心登记自己提供的服务,将服务名、主机与端口号等信息告知注册中心,注册中心会按照服务名进行分类,整理出一个服务清单。服务注册中心还需要以心跳的方式去监测清单中的服务是否可用,若不可用则需要从服务清单中剔除,达到排除故障服务的效果。
服务发现:服务调用者需要向服务注册中心咨询服务,获取所有的服务实例清单,在清单中通过客户端负载均衡的方式选取一个服务实例进行调用。
1.2 常见的服务治理
常见的服务治理组件。
架构师 项目经理
eureka: 它是netflix公司提供的一款组件,这款组件已经停止更新。
nacos: 它是阿里巴巴提供的一款服务治理组件。
zookeeper: 它是apache公司提供的服务治理组件。
consul: 服务治理的组件
1.3 安装nacos治理组件
双击运行
账号和密码:
nacos/nacos
2.微服务注册到注册中心
2.1 添加依赖
<!--注册中心-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
2.2添加配置文件
#zhu ce zhong xin di zhi
spring.cloud.nacos.discovery.server-addr=localhost:8848
# qi ming
spring.application.name=qy163-order
2.3运行主函数
3.实现负载均衡
3.1什么是负载均衡?
负载均衡(Load Balance,简称 LB)是高并发、高可用系统必不可少的关键组件,目标是 尽力将网络流量平均分发到多个服务器上,以提高系统整体的响应速度和可用性。
3.2 手动调试负载均衡
修改Order调用方
3.3 使用ribbon完成负载均衡
3.3.1 什么是ribbon
Ribbon是Netflix发布的云中间层服务开源项目,其主要功能是提供客户端实现负载均衡算法。Ribbon客户端组件提供一系列完善的配置项如连接超时,重试等。简单的说,Ribbon是一个客户端负载均衡器,我们可以在配置文件中Load Balancer后面的所有机器,Ribbon会自动的帮助你基于某种规则(如简单轮询,随机连接等)去连接这些机器,我们也很容易使用Ribbon实现自定义的负载均衡算法。
3.3.2如何使用ribbon
1.再RestTemplate类上加个注解@LoadBalance
2. 修改controller代码
ribbon内置的负载均衡策略
Ribbon内置了多种负载均衡策略,内部负载均衡的顶级接口为 com.netflix.loadbalancer.IRule , 具体的负载策略如下图所示:
如何改变ribbon的负载均衡策略
修改order的配置文件
# xiu gai ribbon fu zai jun heng ce lue bian wei sui ji ce lue
qy163-product.ribbon.NFLoadBalancerRuleClassName=com.netflix.loadbalancer.RandomRule
4.使用openfeign远程调用
4.1什么是openfeign
openFeign是要声明式的web服务客户端,或叫做声明式REST客户端,它让编写web服务客户端变得简单。
使用它的步骤:创建一个接口并注解它。它支持spring MVC的注解,spring cloud openFeign整合了hystrix,同时,可以和Eureka和ribbon配合使用,可以实现负载均衡的http客户端。
可以理解为是请求转发(RPC调度)的入口。
4.2使用openfeign
1.引入依赖
<!--①openfeign-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
2.创建openfeign
3.编写productfeign
@FeignClient(value = "qy163-product")
public interface ProductFeign {
@GetMapping("/product/getById/{pid}")
public Product getById(@PathVariable Integer pid);
}
4.在主函数添加开启注解驱动
@SpringBootApplication
@MapperScan(basePackages = "com.xal.dao")
@EnableFeignClients
public class OrderApp {
public static void main(String[] args) {
SpringApplication.run(OrderApp.class,args);
}
@Bean
@LoadBalanced
public RestTemplate restTemplate(){
return new RestTemplate();
}
}
5.编写controller