一:Feign
網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)公司!專注于網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、微信小程序、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了普蘭免費(fèi)建站歡迎大家使用!
創(chuàng)建FeignClient客戶端
@FeignClient(name = "product")//www.1b23.com public interface IProductClient { @GetMapping("/msg") String productMessage(); @PostMapping("/product/listForOrder") ListproductInfoList(@RequestBody List productIdList); @PostMapping("/product/decreaseStock") void decreaseStock(List cartDtoList); }
@FeignClient(name = "product")
表示這個(gè)接口是Feign客戶端,name表示應(yīng)用名。
@PostMapping("/product/listForOrder")
和普通的Controller層調(diào)用寫法一樣,寫的是調(diào)用的接口,這里的接口是指http://product//product/listForOrder
,和RestTemplate中的調(diào)用url一樣。
使用FeignClient客戶端。
在調(diào)用FeignClient的啟動(dòng)類上加上@EnableFeignClients
。
在其它類中注入IProductClient
接口,直接調(diào)用。
@Autowired private IProductClient productClient; @GetMapping("/getProductMsg") public String getProductMsg(){ String response = productClient.productMessage(); log.info("response={}",response); return response; }
注意,有時(shí)候會(huì)報(bào)找不到IProductClient
這個(gè)bean,此時(shí)就需要添加掃描包,這個(gè)問題在調(diào)用時(shí)經(jīng)常遇到。
@EnableFeignClients(basePackages = "com.springcloud.product.client")
二:ribbon
可以看到 Feign 調(diào)用步驟比較繁瑣,并且傳參數(shù)以及經(jīng)過zuul 問題較多
再來看看ribbon
只需要在 implements 接口類里面引入一個(gè) ribbon 均衡,再方法中調(diào)用即可
/** * www.1b23.com */ @Service @Transactional //開啟事物 public class UsersServiceImpl implements UsersService { @Autowired private LoadBalancerClient loadBalancerClient;//ribbon負(fù)載均衡器 ...... /**保存用戶 * @param pd * @throws Exception */ public void saveUser(PageData pd)throws Exception { usersMapper.saveUser(pd); pd.put("tokenKey", Tools.creatTokenKey("userAdd")); LoadBalancerUtil.responseByPost(this.loadBalancerClient, "fh-dbsync", "user/add", pd); //請(qǐng)求數(shù)據(jù)庫(kù)表同步微服務(wù) } }
"fh-dbsync" 是注冊(cè)到eurake里面的服務(wù)名稱,“user/add” 微服務(wù)的 RequestMapping 完整路徑 “pd” 就是map,存放參數(shù)用的