1. 程式人生 > >spring-cloud(二)服務的呼叫的方式Ribbon和Fegin

spring-cloud(二)服務的呼叫的方式Ribbon和Fegin

一、特點

  在微服務架構中,業務都會被拆分成一個獨立的服務,服務與服務的通訊是基於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);
}