Eureka + Ribbon + restTemplate 实现负载均衡
提示:本篇文章只适合新手参考(因为我也是才学)
一、搭建Eureka-Server
注:父工程自行搭建
1、创建Eureka-Server模块
右击项目—>new—>Model—>spring initalizr
在选择依赖的时候在spring cloud Discovery中选择Eureka Server
2、配置application.yml
因为eureka server是通过主机名来分别实例的,在C:\Windows\System32\drivers\etc\hosts文件最后配置IP与主机名的映射
127.0.0.1 eurekaserver1
127.0.0.1 eurekaserver2
127.0.0.1 eurekaserver3
通过- - -隔断配置文件,并分别为其配置spring:profiles:,在启动配置中根据profiles的名字配置启动实例
application.yml的具体配置
---
server:
port: 8761
spring:
profiles: eurekaServer1
application:
name: eureka-server
#巨坑: 多个配置的spring:application:name需要相同
eureka:
instance:
# prefer-ip-address: true
hostname: eurekaserver1
client:
fetch-registry: true
#开启eureka-server之间相互注册
register-with-eureka: true
service-url:
defaultZone: http://eurekaserver2:8760/eureka/,http://eurekaserver3:8759/eureka/
---
server:
port: 8760
spring:
profiles: eurekaServer2
application:
name: eureka-server
eureka:
instance:
# prefer-ip-address: true
hostname: eurekaserver2
client:
fetch-registry: true
register-with-eureka: true
service-url:
defaultZone: http://eurekaserver1:8761/eureka/,http://eurekaserver3:8759/eureka/
---
server:
port: 8759
spring:
profiles: eurekaServer3
application:
name: eureka-server
eureka:
instance:
hostname: eurekaserver3
# prefer-ip-address: true
client:
fetch-registry: true
register-with-eureka: true
service-url:
defaultZone: http://eurekaserver2:8760/eureka/,http://eurekaserver1:8761/eureka/
3、添加@EnableEurekaServer
在启动类上添加@EnableEurekaServer注解
二、搭建Eureka-Client
这里的Eureka-Client模块作为服务提供者模块
1、创建Eureka-Client模块
在选择依赖的时候在spring cloud Discovery中选择Eureka Discovery Client
2、配置application.yml
---
#注册中心的URL
eureka:
client:
service-url:
defaultZone: http://eurekaserver1:8761/eureka/,http://eurekaserver2:8760/eureka/,http://eurekaserver3:8759/eureka/
server:
port: 8762
spring:
application:
name: eureka-client
profiles: eurekaclient1
---
eureka:
client:
service-url:
defaultZone: http://eurekaserver1:8761/eureka/,http://eurekaserver2:8760/eureka/,http://eurekaserver3:8759/eureka/
server:
port: 8763
spring:
application:
name: eureka-client
profiles: eurekaclient2
3、添加@EnableEurekaClient
在启动类上添加@EnableEurekaClient注解
4、编写测试controller
添加controller包,然后在里面创建TestController类
@RestController
@RequestMapping("/test/")
public class TestController {
@Value("${server.port}")
String port;
@RequestMapping("info")
public String home(){
return "I am from port:" + port;
}
}
三、搭建服务消费者模块(Ribbon)
1、创建模块
在选择依赖时在spring cloud Discovery中选择Eureka Discovery Client和sping cloud Routing中选择Ribbon,构建完成后在pom文件中添加spring-boot-starter-web依赖
2、配置application.yml
spring:
application:
name: eureka-ribbon-client
server:
port: 8764
#配置注册中心的
eureka:
client:
service-url:
defaultZone: http://eurekaserver1:8761/eureka/,http://eurekaserver2:8760/eureka/,http://eurekaserver3:8759/eureka/
3、添加@EnableEurekaClient
在启动类上添加@EnableEurekaClient注解
4、创建RestTemplate的配置类
创建config包,并创建RestTemplateConfig类
@Configuration
public class RestTemplateConfig{
@Bean
@LoadBalanced
RestTemplate restTemplate(){
/**
*对RestTemplate进行配置
*/
SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
factory.setConnectTimeout(3000);
factory.setReadTimeout(3000);
return new RestTemplate(factory);
}
}
5、创建测试service
创建service包,并在其中创建TestService类,在URL拼接的时候将主机名和端口号替换成服务应用名称
@Service
public class TestService {
@Autowired
RestTemplate restTemplate;
//RestTemplate 中有很多的获取方式
public String test(){
return restTemplate.getForObject("http://eureka-client/test/info",String.class);
}
}
6、创建测试controller
创建controller包,并创建TestController类
@RestController
@RequestMapping("test")
public class TestController {
@Autowired
TestService testService;
@Autowired
private LoadBalancerClient loadBalancerClient;
//测试RestTemplate
@GetMapping("")
public String test() {
return testService.test();
}
//测试ribbon的负载均衡,交替选择服务实例
@GetMapping("/testRibbon")
public String testRibbon() {
ServiceInstance choose = loadBalancerClient.choose("eureka-client");
return choose.getHost() + ":" + choose.getPort();
}
}
7、Ribbon常用配置
#ribbon常用配置
ribbon:
ConnectTimeout: 1000 #服务请求连接超时时间(毫秒)
ReadTimeout: 3000 #服务请求处理超时时间(毫秒)
OkToRetryOnAllOperations: true #对超时请求启用重试机制
MaxAutoRetriesNextServer: 1 #切换重试实例的最大个数
MaxAutoRetries: 1 # 切换实例后重试最大次数
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule #修改负载均衡算法
8、Ribbon的负载均衡算法规则
总结
本文章主要是整合服务者、服务消费者和注册与发现中心的环境搭建
RestTemplate教程网站