1. 程式人生 > >Spring-Cloud學習筆記(二)RestTemplate和Feign的使用方式以及部分註解的使用

Spring-Cloud學習筆記(二)RestTemplate和Feign的使用方式以及部分註解的使用

通常,我們在搭建springcloud微服務架構時,會把我們的服務註冊到高可用eureka服務註冊發現中心上面,各個服務之間的通訊就是無可避免的,此時我們就需要用到RestTemplate 或者Feign去進行各個服務之間的通訊呼叫。

                                   RestTemplate的三種使用方式

1、直接只用RestTemplate 方式呼叫,url寫死。

  String  msg =restTemplate.getForObject("http://localhost:8080/server/msg",String.class);

2、利用 loadBalancerClient 通過應用名(spring.application.name或者在eureka註冊中心頁面可以看到此名稱)獲取 url,然後在使用restTemplate

    @Autowired
    private LoadBalancerClient loadBalancerClient;


    String  url = String.format("http://%s:%s/",serviceInstance.getHost(),serviceInstance.getPort())+"server/msg";
    msg =  restTemplate.getForObject(url,String.class);
    log.info("獲取的msg為{}",msg);

3、方式三(利用@LoadBalanced註解,可在restTemplate中使用應用名字的方式去呼叫url)

@Component
public class RestTemplateConfig {

       @Bean
       @LoadBalanced
       public RestTemplate  restTemplate(){
           return new RestTemplate();
       }

}

或者
 @Autowired
 @LoadBalanced
 private RestTemplate restTemplate;


String  msg  = restTemplate.getForObject("http://PRODUCT/server/msg",String.class);

spring-cloud 中的負載均衡器rabbion,預設是輪詢機制,可以通過以下方式更改為隨機負載均衡機制。

PRODUCT: #應用的Application名稱
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule  

                                                      Feign的使用方式

新增依賴

<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-feign</artifactId>
			<version>1.4.5.RELEASE</version>
		</dependency>

在啟動類上面新增@EnableFeignClients註解

@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients(basePackages = "com.example.order.client")  #指定遠端呼叫的服務的包名
public class OrderApplication {

	public static void main(String[] args) {
		SpringApplication.run(OrderApplication.class, args);
	}
}

編寫程式碼

package com.example.order.client;

import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;

/**
 * 指定應用名稱
 */
@FeignClient(name = "product")
public interface ProductClient {

          @GetMapping("/server/msg")
          String getMsg();

}

呼叫服務

  @Autowired
   private ProductClient productClient;

   msg = productClient.getMsg();
   return  msg;

Feign採用宣告式REST客戶端(偽rpc)採用了基於介面的註解

,本質還是http客戶端,通過feign能夠對遠端呼叫對於開發者完全透明,得到與呼叫本地方法一致的編碼體驗。