客户端负载均衡 Spring Cloud Ribbon
Spring Cloud Ribbon是一个基于客户端负载均衡的工具,是基于Spring Cloud NetFlix 实现的,在远程调用多节点服务,通过客户端进行转换。
通过Spring Cloud R巾bon的封装, 我们在微服务架构中使用客户端负载均衡调用非常 简单, 只需要如下两步:
• 服务提供者只需要启动多个服务实例并注册到一个注册中心或是多个相关联的服务 注册中心。
• 服务消费者直接通过调用被@LoadBalanced注解修饰过的 RestTemplate来实现面 向服务的接口调用。 这样,我们就可以将服务提供者的高可用以及服务消费者的负载均衡调用一起实现了。
以下是简单的演示示例;
首先启动两个远程服务,在启动的时候都注册到eureka注册中心,端口分别是9011和9001.
另外在启动一个客户端服务。让他来远程调用服务端服务。
然后观察服务端返回的信息,包括端口和ip地址。
代码
远程服务示例;
@RestController
public class FlowController {
@Value("${server.port}")
public String port;
@Value("${spring.cloud.client.ip-address}")
private String ip;
@RequestMapping(value="/getStr")
public String hello(){
return "hello word This is a Ribbon Test"+"访问的地址:"+"http//"+ip+":"+port;
}
}
配置文件
#服务注册中心
server.port=9001
eureka.client.serviceUrl.defaultZone=http://192.168.11.128:9000/eureka/
spring.application.name=login-service
分别以9011和9001端口启动观察服务注册中心
客户端服务配置如下
服务注册中心
server.port=9002
server.servlet.context-path=/a
eureka.client.serviceUrl.defaultZone=http://192.168.11.128:9000/eureka/
spring.application.name=dzsw-service
#spring.security.user.password=123456
#数据库连接
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.password=123456
spring.datasource.username=root
spring.datasource.url=jdbc:mysql://localhost:3306/sys?serverTimezone=UTC&characterEncoding=utf-8
#每次执行是更新数据表
spring.jpa.hibernate.ddl-auto=update
#显示sql
spring.jpa.show-sql=true
spring.jackson.date-format=java.text.SimpleDateFormat
远程调用代码:
@RestController
public class LoginController {
@Autowired
private RestTemplate restTemplate;
@GetMapping(value = "/getStr")
public String getStr(){
String testStr = restTemplate.getForObject("http://login-service/getStr",String.class);
return testStr;
}
}
启动起来之后观察服务返回的端口信息,发现在9001和9011之间来回交换显示端口。说明服务信息是在两个节点之间来回调用返回的。