javascript
SpringCloud(三)之Feign实现负载均衡的使用
一?點睛
Feign是Netflix開發(fā)的聲明式、模板化的HTTP客戶端,?Feign可以幫助我們更快捷、優(yōu)雅地調(diào)用HTTP?API。
在Spring?Cloud中,使用Feign非常簡單——創(chuàng)建一個接口,并在接口上添加一些注解,代碼就完成了。Feign支持多種注解,例如Feign自帶的注解或者JAX-RS注解等。
Spring?Cloud對Feign進行了增強,使Feign支持了Spring?MVC注解,并整合了Ribbon和Eureka(在我的前兩篇文章中講過了),從而讓Feign的使用更加方便。
Spring Cloud Feign是基于Netflix feign實現(xiàn),整合了Spring?Cloud?Ribbon和Spring?Cloud?Hystrix,除了提供這兩者的強大功能外,還提供了一種聲明式的Web服務(wù)客戶端定義的方式。
Spring?Cloud?Feign幫助我們定義和實現(xiàn)依賴服務(wù)接口的定義。在Spring?Cloud feign的實現(xiàn)下,只需要創(chuàng)建一個接口并用注解方式配置它,即可完成服務(wù)提供方的接口綁定,簡化了在使用Spring?Cloud?Ribbon時自行封裝服務(wù)調(diào)用客戶端的開發(fā)量。
Spring?Cloud?Feign具備可插拔的注解支持,支持Feign注解、JAX-RS注解和Spring?MVC的注解。
二,怎么使用?
1.pom.xml中加入依賴
<dependency><groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
2.在啟動類中加入注解 @SpringBootApplication
@EnableFeignClients
public class OrderServiceApplication {
public static void main(String[] args) {
SpringApplication.run(OrderServiceApplication.class, args);
}
@Bean
@LoadBalanced
public RestTemplate restTemplate() {
return new RestTemplate();
}
}
3.創(chuàng)建一個接口(ProductClient) //服務(wù)的生成者(被調(diào)用者)在注冊中心注冊的名字
@FeignClient(name = "product-service")
public interface ProductClient {
//被調(diào)用者對應(yīng)方法的路由(類和方法上的@RequestMapping)
/**
* 這里需要注意的兩個地方
* <p>
* 1、在這里使用的GetMapping注解要和被調(diào)用發(fā)一致,如果還有問題就用@RequestMapping
* 2、@PathVariable需要設(shè)置value,如果不設(shè)置也不能成功啟動 * 注意點 1、路徑
* 2、Http方法必須對應(yīng) * 3、使用requestBody,應(yīng)該使用@PostMapping
* 4、多個參數(shù)的時候,通過@RequestParam("id") int id)方式調(diào)用 */
@GetMapping("/api/v1/product/find")
String findById(@RequestParam(value = "id") int id);
}
4.在需要的地方注入ProductClient 調(diào)用其方法 @Service
public class ProductOrderServiceImpl implements ProductOrderService {
@Autowired
private ProductClient productClient;
@Override
public ProductOrder save(int userId, int productId) {
//通過Feign 調(diào)用返回的是字符串幾個使用json轉(zhuǎn)換工具轉(zhuǎn)成對象使用
String product = productClient.findById(userId);
JsonNode jsonNode = JsonUtils.stringToNode(product);
ProductOrder productOrder = new ProductOrder();
productOrder.setCreateTime(new Date());
productOrder.setUserId(userId);
productOrder.setTradeNo(UUID.randomUUID().toString());
productOrder.setProductName(jsonNode.get("name").toString());
productOrder.setPrice(Integer.parseInt(jsonNode.get("price").toString()));
return productOrder;
}
}
上面完成了,Feign 也就可以用了,如果你要配置集群,測試默認負載策略,和上一篇文章ribbon 一模一樣。
因為Feign整合了ribbon 而且上一篇文章對于ribbon配置負載策略的方法對于Feign也有效。
2、超時配置
默認optons readtimeout是60,但是由于hystrix默認是1秒超時,所以默認就是1秒 在調(diào)用方y(tǒng)ml 文件中加入一下配置(1秒足以,除非項目有要求,不然不需要配置)
#修改調(diào)用超時時間
feign:
client:
config:
default:
connectTimeout: 2000
readTimeout: 2000
spring cloud的Netflix中提供了兩個組件實現(xiàn)軟負載均衡調(diào)用:ribbon和feign
3.ribbon和feign兩個的區(qū)別和選擇
目前,在Spring cloud 中服務(wù)之間通過restful方式調(diào)用有兩種方式?
- restTemplate+Ribbon?
- feign
相同點:
:ribbon和feign都是實現(xiàn)軟負載均衡調(diào)用
不同點:
ribbon:
是一個基于 HTTP 和 TCP 客戶端的負載均衡器?
它可以在客戶端配置 ribbonServerList(服務(wù)端列表),然后默認以輪詢請求以策略實現(xiàn)均衡負載,他是使用可以用restTemplate+Ribbon 使用
feign:
Spring Cloud Netflix 的微服務(wù)都是以 HTTP 接口的形式暴露的,所以可以用 Apache 的 HttpClient ,而 Feign 是一個使用起來更加方便的 HTTP 客戶端,使用起來就像是調(diào)用自身工程的方法,而感覺不到是調(diào)用遠程方法
選擇
選擇feign
默認集成了ribbon
寫起來更加思路清晰和方便
采用注解方式進行配置,配置熔斷等方式方便
轉(zhuǎn)載于:https://www.cnblogs.com/xiaowangbangzhu/p/10397037.html
總結(jié)
以上是生活随笔為你收集整理的SpringCloud(三)之Feign实现负载均衡的使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JAVA三角海伦公式,海伦公式求三角形面
- 下一篇: 谷歌浏览器历史版本解决chrome浏览器