目錄
Restemplate方式調(diào)用存在的問(wèn)題
Feign的介紹
基于Feign遠(yuǎn)程調(diào)用
Feign自定義配置
修改日志方式一(基于配置文件)
修改日志方式二(基于java代碼)
Feign的性能優(yōu)化
連接池使用方法?
Feign_最佳實(shí)踐分析?
?方式一:
方式二
?實(shí)現(xiàn)Feign最佳實(shí)踐(方式二)
?兩種解決方案
Restemplate方式調(diào)用存在的問(wèn)題
Feign的介紹
就像早期的事務(wù),需要手動(dòng)的開(kāi)啟事務(wù),提交事務(wù),有了spring之后聲明式事務(wù)只需要在配置文件里面定義好規(guī)則即可。
聲明式http也是一樣,提前定義好發(fā)送請(qǐng)求需要的信息,剩下的Feign完成。
基于Feign遠(yuǎn)程調(diào)用
定義和使用Feign客戶端
?
在這里剛好用到了所有在使用Restemplate發(fā)送請(qǐng)求時(shí)用到的數(shù)據(jù)。
業(yè)務(wù)代碼如下
@Service
public class OrderService {
@Autowired
private OrderMapper orderMapper;
@Autowired
private UserClient userClient;
public Order queryOrderById(Long orderId) {
// 1.查詢訂單
Order order = orderMapper.findById(orderId);
//2.利用Feign遠(yuǎn)程調(diào)用
User user = userClient.findById(order.getUserId());
//3.封裝user到order
order.setUser(user);
// 4.返回
return order;
}
// @Autowired
// private RestTemplate restTemplate;
//
// public Order queryOrderById(Long orderId) {
// // 1.查詢訂單
// Order order = orderMapper.findById(orderId);
// //2.利用RestTemplate發(fā)起http請(qǐng)求,查詢用戶
// String url="http://userserver/user/"+order.getUserId();
// User user = restTemplate.getForObject(url, User.class);
// //3.封裝user到order
// order.setUser(user);
// // 4.返回
// return order;
// }
}
?小問(wèn)題_:如果項(xiàng)目里面引入了下面這注解就一定要去配置bootstrap.yml獲取nacos上的配置文件,不然項(xiàng)目會(huì)一直報(bào)錯(cuò)。
<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency>
并且Feign里面自帶一個(gè)ribbon,實(shí)現(xiàn)了負(fù)載均衡。
Feign自定義配置
修改日志方式一(基于配置文件)
沒(méi)修改前:
?修改后:? 輸出日志瞬間多了很多
修改日志方式二(基于java代碼)
Feign的性能優(yōu)化
有了連接池可以減少性能損耗
連接池使用方法?
?
Feign_最佳實(shí)踐分析?
?方式一:
左下面這個(gè)消費(fèi)者中的代碼就是用注解聲明遠(yuǎn)程調(diào)用的一些信息,用于發(fā)送請(qǐng)求到提供者中去。
右下面換這個(gè)提供者中的代碼就是用于接收的類。
兩個(gè)方法除了方法名不同,其余都相同。這兩個(gè)是必須一樣,不是巧合。
?
??spring官方有所一般情況下不推薦服務(wù)端和客戶端共享接口,會(huì)造成緊耦合。
方式二
將對(duì)同一個(gè)服務(wù)同一些接口的FeignClinent抽取出來(lái)形成一個(gè)獨(dú)立模塊供所有的消費(fèi)者使用。
?實(shí)現(xiàn)Feign最佳實(shí)踐(方式二)
?按照上面方法測(cè)試會(huì)有一個(gè)報(bào)錯(cuò)
?'cn.itcast.feign.clients.UserClient'?that could not be found.
不是編譯報(bào)錯(cuò),而是springIOC容器里面沒(méi)有這個(gè)對(duì)象,無(wú)法實(shí)現(xiàn)自動(dòng)注入。
這是因?yàn)橄旅孢@個(gè)接口原本有@FeignClient這個(gè)注解,spring掃描到了這個(gè)注解就會(huì)給該接口創(chuàng)建對(duì)象?,F(xiàn)在因?yàn)椴辉趩?dòng)類所在包里面了,掃描不到了。
?兩種解決方案
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-610609.html
?推薦使用第二種,用到什么就指定什么。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-610609.html
到了這里,關(guān)于微服務(wù)——http客戶端Feign的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!