Open Aeizzz opened 6 years ago
在上面的教程中,已经完成了注册中心的搭建,那么我们如何去消费注册中心的服务呢
Ribbon是一个基于HTTP和TCP客户端的负载均衡器。Feign中也使用Ribbon,后续会介绍Feign的使用。
Ribbon可以在通过客户端中配置的ribbonServerList服务端列表去轮询访问以达到均衡负载的作用。
当Ribbon与Eureka联合使用时,ribbonServerList会被DiscoveryEnabledNIWSServerList重写,扩展成从Eureka注册中心中获取服务端列表。同时它也会用NIWSDiscoveryPing来取代IPing,它将职责委托给Eureka来确定服务端是否已经启动。
下面我们通过实例看看如何使用Ribbon来调用服务,并实现客户端的均衡负载。
在应用主类中,通过@EnableDiscoveryClient注解来添加发现服务能力。创建RestTemplate实例,并通过@LoadBalanced注解开启均衡负载能力。
@SpringBootApplication @EnableDiscoveryClient public class RibbonApplication { @Bean @LoadBalanced RestTemplate restTemplate() { return new RestTemplate(); } public static void main(String[] args) { SpringApplication.run(RibbonApplication.class, args); } }
创建一个Controller来消费A的add服务。通过直接RestTemplate来调用服务。并且需要将服务注册到注册中心,示例如下:
@RestController public class ConsumerController { @Autowired RestTemplate restTemplate; @RequestMapping(value = "/add", method = RequestMethod.GET) public String add() { return restTemplate.getForEntity("http://A/add?a=10&b=20", String.class).getBody(); } }
在主类中添加@EnableCircuitBreaker注解开启断路器功能:
@SpringBootApplication @EnableDiscoveryClient @EnableCircuitBreaker public class RibbonApplication { @Bean @LoadBalanced RestTemplate restTemplate() { return new RestTemplate(); } public static void main(String[] args) { SpringApplication.run(RibbonApplication.class, args); } }
改造原来的服务消费方式,在使用ribbon消费服务的函数上增加@HystrixCommand注解来指定回调方法。
@Service public class AService { @Autowired RestTemplate restTemplate; @HystrixCommand(fallbackMethod = "addServiceFallback") public String addService() { return restTemplate.getForEntity("http://A/add?a=10&b=20", String.class).getBody(); } public String addServiceFallback() { return "error"; } }
Feign是一个声明式的Web Service客户端,它使得编写Web Serivce客户端变得更加简单。我们只需要使用Feign来创建一个接口并用注解来配置它既可完成。它具备可插拔的注解支持,包括Feign注解和JAX-RS注解。Feign也支持可插拔的编码器和解码器。Spring Cloud为Feign增加了对Spring MVC注解的支持,还整合了Ribbon和Eureka来提供均衡负载的HTTP客户端实现。
下面,通过一个例子来展现Feign如何方便的声明对上述服务的定义和调用。
假设所有服务注册到了Eureka服务中,若服务it-ui需要调用it-admin 的服务。
首先在it-ui模块中添加接口,如DictService,在Service上添加注解@FeignClient,然后在接口的方法上利用Spring MVC的注解就可以完成对it-admin服务的调用。
@FeignClient中填写的参数是注册到eureka注册中心的服务名称。 @RequestMapping中的路径是被调用服务的controller地址。
@FeignClient("it-admin") public interface DictService { @RequestMapping(value = "/sysDict/get/{id}", method = RequestMethod.GET) Result getDictById(@PathVariable("id") String id); @RequestMapping(value = "/sysDict/list/{pageNo}/{pageSize}", method = RequestMethod.GET) Result<Page> pageDict(@PathVariable("pageNo") Integer pageNo, @PathVariable("pageSize") Integer pageSize); @RequestMapping(value = "/sysDict/save", method = RequestMethod.POST) Result saveDict(@RequestBody SysDictDto dto); @RequestMapping(value = "/sysDict/delete/{ids}", method = RequestMethod.DELETE) Result deleteDictByIds(@PathVariable("ids") String ids); @RequestMapping(value = "/sysDict/findByType", method = RequestMethod.GET) List getDictByType(@RequestParam("type") String type); @RequestMapping(value = "/sysDict/findByValue", method = RequestMethod.GET) SysDict getDictByValue(@RequestParam("type") String type, @RequestParam("value") String value); @RequestMapping(value = "/sysDict/findByLable", method = RequestMethod.GET) SysDict getDictByLabel(@RequestParam("type") String type, @RequestParam("label") String label); }
在原有@FeignClient("it-admin")的注解中添加属性 @FeignClient(value = "it-admin-service", fallback = AdminServiceFallBack.class) 当服务调用失败后,会调用fallback中指定类的方法
@Service public class AdminServiceFallBack implements DictService { //...................省略接口实现.................. }
详细使用,可查看官方文档。文档
在上面的教程中,已经完成了注册中心的搭建,那么我们如何去消费注册中心的服务呢
Ribbon
Ribbon使用
Ribbon是一个基于HTTP和TCP客户端的负载均衡器。Feign中也使用Ribbon,后续会介绍Feign的使用。
Ribbon可以在通过客户端中配置的ribbonServerList服务端列表去轮询访问以达到均衡负载的作用。
当Ribbon与Eureka联合使用时,ribbonServerList会被DiscoveryEnabledNIWSServerList重写,扩展成从Eureka注册中心中获取服务端列表。同时它也会用NIWSDiscoveryPing来取代IPing,它将职责委托给Eureka来确定服务端是否已经启动。
下面我们通过实例看看如何使用Ribbon来调用服务,并实现客户端的均衡负载。
在应用主类中,通过@EnableDiscoveryClient注解来添加发现服务能力。创建RestTemplate实例,并通过@LoadBalanced注解开启均衡负载能力。
创建一个Controller来消费A的add服务。通过直接RestTemplate来调用服务。并且需要将服务注册到注册中心,示例如下:
断路器使用
在主类中添加@EnableCircuitBreaker注解开启断路器功能:
改造原来的服务消费方式,在使用ribbon消费服务的函数上增加@HystrixCommand注解来指定回调方法。
Feign
Feign使用
Feign是一个声明式的Web Service客户端,它使得编写Web Serivce客户端变得更加简单。我们只需要使用Feign来创建一个接口并用注解来配置它既可完成。它具备可插拔的注解支持,包括Feign注解和JAX-RS注解。Feign也支持可插拔的编码器和解码器。Spring Cloud为Feign增加了对Spring MVC注解的支持,还整合了Ribbon和Eureka来提供均衡负载的HTTP客户端实现。
下面,通过一个例子来展现Feign如何方便的声明对上述服务的定义和调用。
假设所有服务注册到了Eureka服务中,若服务it-ui需要调用it-admin 的服务。
首先在it-ui模块中添加接口,如DictService,在Service上添加注解@FeignClient,然后在接口的方法上利用Spring MVC的注解就可以完成对it-admin服务的调用。
@FeignClient中填写的参数是注册到eureka注册中心的服务名称。 @RequestMapping中的路径是被调用服务的controller地址。
Feign断路器使用
在原有@FeignClient("it-admin")的注解中添加属性 @FeignClient(value = "it-admin-service", fallback = AdminServiceFallBack.class) 当服务调用失败后,会调用fallback中指定类的方法
详细使用,可查看官方文档。文档