一个微服务系统中有许多的微服务,在注册中心Eureka中注册以后,它们之间要如何调运,在这里讲述两种常用方式
SpringCloud原有的客户端负载均衡⽅案Ribbon已经被废弃,取⽽代之的是SpringCloud LoadBalancer——负载均衡,在Spring Cloud构件微服务系统中,LoadBalancer作为服务消费者的负载均衡器,有两种使⽤⽅ 式,⼀种是LoadBalancer和RestTemplate相结合,另⼀种是和Feign相结合,Feign已经默认集成了LoadBalancer ——Cloud OpenFeign
在这里主要讲解spring cloud openFeign,因为Feign是⼀个声明式的HTTP客户端组件,它旨在是编写Http客户端变得更加容易。OpenFeign添加 了对于Spring MVC注解的⽀持,同时集成了Spring Cloud LoadBalancer和Spring Cloud CircuitBreaker,在使⽤Feign时,提供负载均衡和熔断降级的功能
1.依赖
在服务的消费者(spring-customer)添加依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
2.启动器注解 使⽤@EnableFeignClients开启Feign功能
3.服务提供端代码
@RestController
@RequestMapping("bill")
public class BillController {
@Autowired
private BillService billService;
@GetMapping("/provide/{id}")
public JSONObject provider(@PathVariable("id") Integer id){
Bill bill = billService.queryOne(id);
JSONObject jsonObject = new JSONObject();
jsonObject.put("bill", bill);
return jsonObject;
}
}
4.服务消费端创建Feign客户端
在注解@FeignClient注spring-bill”是服务名,使⽤这个名字来从Eureka服务 列表中得到相应的服务,来创建LoadBalancer客户端,也可以使⽤url属性,指定服务的URL。
@FeignClient("spring-bill")
public interface BillClient {
@GetMapping("/bill/provide/{id}")
public JSONObject toUpdate(@PathVariable("id") Integer id);
}
5.服务消费端创建Controller层
在Controller中使⽤FeignClient访服务提供端,代码如下
@RestController
@RequestMapping("customer")
public class BillController {
@Autowired
private BillClient billClient;
@RequestMapping("/bill/{id}")
public JSONObject getBill(@PathVariable("id") Integer id){
JSONObject bill = billClient.toUpdate(id);
return bill;
}
}
6. 启动并测试
分别服务提供10000端⼝,服务消费10005端⼝,eureka端口9005,访问 http://localhost:10005/customer/bill/2,http://localhost:10000//bill/provide/2,可以看到查询结果一致,说明消费者调用了提供者
7.负载均衡设置
在服务提供端,端口设置为 port: ${port:10000}
复制另一个端口10001,设置如下
访问 http://localhost:10005/customer/bill/2,这时会循环访问端口10000与10001