Eureka注册中心 :
Eureka注册中心一般都是做的集群:
引入依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
server.port=10087
spring.application.name=eureka-server
#开始做集群
eureka.client.service-url=defaultZone:localhost:10086/eureka
server.port=10086
spring.application.name=eureka-server
#开始做集群
eureka.client.service-url=defaultZone:localhost:10087/eureka
在启动类上面加入
@EnableEurekaServer
分别启动即可搭成集群
Ribbon的负载均衡和重试机制:
ribbon的负载均衡 在Eureka的坐标已经引入不需要单独引入
为了体现出负载均衡和我们的重试机制
那么我们搭建好 两个Service服务,一个Consumer消费
两个service服务配置
因为我们的注册中心用是集群所以我们需要些两个地址
server.port=8088
Spring.application.name=eureka-service
Eureka.client.service-url=defaultZone:http://localhost:10086/eureka,http://localhost:10087/eureka
在启动类上面添加注解@EnableDiscoveryClient
一个consumer消费配置
添加配置
server.port=8080
eureka.client.service-url=defaultZone : http://localhost:10086/eureka,http://localhost:10087/eureka
#开启默认为true重连机制
Spring.cloud.loadBalancer.retry.enable=true
cloud-service:
ribbon:
ConnectTimeTimeOut: 250 #允许的连接超时间范围
ReadTimeout: 1000 #允许的读取时间范围
OkToRetryOnAllOperations: true #允许所有的操作进行重试
MaxAutoRetriesNextServer: 1 #切换实列的重复
MaxAutoRetries: 1 #对当前实例的重复次数
在启动类上面添加@EnableDiscoveryClient
在启动来上面加载@LoadBalanced(在Eureka包里面这样就算开启的负载均衡问题)
@Bean
@LoadBalanced
public RestTemplate restTemplate(){
return new RestTemplate();
}
在开始调用服务的时候我们这样写 :
@Autowired
private RestTemplate restTemplate;
public User selectById(Integer id) {
Long startTime = System.currentTimeMillis();
User user = restTemplate.getForObject("http://cloud-service/user/" + id, User.class);
Long endTime = System.currentTimeMillis();
log.info("访问的时间为:{}",Math.abs( startTime-endTime));
return user;
}
在请求的url地址写的就是服务名字,默认用的是轮询。这样就是实现了负载均衡的问题
重连机制
加入
<dependency>
<groupId>org.springframework.retry</groupId>
<artifactId>spring-retry</artifactId>
</dependency>
结合上面的配置 这样就可以了