Spring-Cloud學習筆記(二)RestTemplate和Feign的使用方式以及部分註解的使用
阿新 • • 發佈:2019-02-01
通常,我們在搭建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能夠對遠端呼叫對於開發者完全透明,得到與呼叫本地方法一致的編碼體驗。