eureka的服务集群(ribbon和restTemplate)

1.关于eureka的服务集群现在的部署是这样的

现在可以看到一共有两个服务,一个是客户端的order,另一个是payment,其中payment还提供了集群配置

2.order调用payment:现在,我们使用restTemplate来调用接口,先把restTemplate注入到spring中:

 

 3.然后调用:

 

 这里的rurl原来是:http://eureka7001.com:7001,现在要改成集群了,所以要换成服务名也就是cloud-payment-service,但是这个服务下有两个地址啊,

这样直接调用的话eureka也不知道该路由到哪个地址,所以在配置restTemplate的方法前

加上@LoadBalanced负载均衡,默认的是轮询,现在就用这个测试就可以。

4.测试,这里返回的data就是在8001和8002项目的yml的的port,现在把它拿过来证明负载均衡的轮询实现:

 

 

4.微服务信息完善:在eureka的web页面改主机名和添加IP地址:

用到的jar包:spring-boot-starter-actuator

修改主机名和添加ip地址:在服务提供者的yml文件的eureka下添加instance属性:

instance:
instance-id: payment8002
prefer-ip-address: true

 这样改完了在eureka的界面就可以看到修改的主机名,点击后就可以看到ip地址了。

 

 5.服务发现,观看下图可知现在eureka中有2个微服务,而在第二个微服务下提供了两个节点,那怎么获取微服务列表和具体的节点呢?

 

 首先注入 服务发现的组件

@Resource

private  EurekaDiscoveryClient discoveryClient;

@PostMapping("/find/discoveryclient")
@ResponseBody
public ResultObject finddiscoveryclient(){
//获得所有微服务
List l = discoveryClient.getServices();
//获得某一个微服务实例下的详细信息
List<ServiceInstance> l2 = discoveryClient.getInstances("CLOUD-PAYMENT-SERVICE");
for (ServiceInstance s :l2){
System.out.println(s.getHost()+s.getServiceId()+s.getPort()+s.getUri());
}
return ReturnResult.success();

}

结果:

 

 6.主类加上新的注解@EnableDiscoveryClient

7.eureka保护机制:

eureka的客户端会向服务端发送心跳包,如果在默认90秒没有收到心跳包,则会移除这个微服务,但是如果因为网络等故障导致发送延迟的话,eureka的保护机制就会起作用,此时不会移除微服务,eureka实现的是CAP中的AP,即高可用和网络分区。

8.关闭保护机制:

eureka服务端yml:

server:
enable-self-preservation: false

客户端yml:

lease-renewal-interval-in-seconds: 1   :客户端向服务端发送心跳的频率1秒,默认是30秒

lease-expiration-duration-in-seconds:2  服务端在最后一次收到心跳包后再没有收到的话就移除这个实例

 

posted @ 2020-04-29 11:50  ~笑春风~  阅读(184)  评论(0)    收藏  举报