spring-cloud(二)服務的呼叫的方式Ribbon和Fegin
阿新 • • 發佈:2018-11-14
一、特點
在微服務架構中,業務都會被拆分成一個獨立的服務,服務與服務的通訊是基於http restful的。Spring cloud有兩種服務呼叫方式:
1. ribbon+restTemplate
ribbon是一個客戶端可以負載均衡的呼叫方式。
2. fegin
a.fegin集成了ribbon,具有負載均衡的能力;
b.整合了Hystrix,具有熔斷的能力;
c.fegin是給予介面註解方式的,使用十分便捷
二、應用
2.1第一種方式:ribbon+restTemplate
2.1.1 在配置檔案(.yml)中新增配置檔案,註冊該工程到服務註冊中興Eureka中,並在啟動類中新增配置
eureka: client: serviceUrl: defaultZone: http://localhost:8761/eureka/ server: port: 8764 spring: application: name: service-ribbon
@SpringBootApplication @EnableDiscoveryClient(暴露客戶端) public class ServiceRibbonApplication { public static void main(String[] args) { SpringApplication.run(ServiceRibbonApplication.class, args); } @Bean @LoadBalanced RestTemplate restTemplate() { return new RestTemplate(); } }
2.1.2 容器中注入:restTemplate
@Bean @LoadBalanced RestTemplate restTemplate() { return new RestTemplate(); }
2.1.3 使用restTemplate呼叫遠端服務
@Service public class HelloService { @Autowired RestTemplate restTemplate; public String hiService(String name) {
//SERVICE-HI是已經註冊到服務註冊中心的一個微服務
return restTemplate.getForObject("http://SERVICE-HI/hi?name="+name,String.class); }
}
2.2 第二種方式:feign
2.2.1 在配置檔案(.yml)中新增配置檔案,註冊該工程到服務註冊中興Eureka中,並在啟動類中新增配置
eureka: client: serviceUrl: defaultZone: http://localhost:8761/eureka/ server: port: 8765 spring: application: name: service-feign
@SpringBootApplication @EnableDiscoveryClient @EnableFeignClients(使用fegin註解) public class ServiceFeignApplication { public static void main(String[] args) { SpringApplication.run(ServiceFeignApplication.class, args); } }
2.2.2通過註解呼叫()
@FeignClient(value = "service-hi") public interface SchedualServiceHi {
//相當於呼叫"http://SERVICE-HI/hi?name="+name
@RequestMapping(value = "/hi",method = RequestMethod.GET)
String sayHiFromClientOne(@RequestParam(value = "name") String name);
}