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 服务端在最后一次收到心跳包后再没有收到的话就移除这个实例


浙公网安备 33010602011771号