一:Feign
創建FeignClient客戶端
@FeignClient(name = "product")//www.1b23.com public interface IProductClient { @GetMapping("/msg") String productMessage(); @PostMapping("/product/listForOrder") List<ProductInfo> productInfoList(@RequestBody List<String> productIdList); @PostMapping("/product/decreaseStock") void decreaseStock(List<CartDto> cartDtoList); }
@FeignClient(name = "product")
表示這個接口是Feign客戶端,name表示應用名。@PostMapping("/product/listForOrder")
和普通的Controller層調用寫法一樣,寫的是調用的接口,這裏的接口是指http://product//product/listForOrder
,和RestTemplate中的調用url一樣。
使用FeignClient客戶端。
在調用FeignClient的啓動類上加上
@EnableFeignClients
。在其它類中注入
IProductClient
接口,直接調用。
@Autowired private IProductClient productClient; @GetMapping("/getProductMsg") public String getProductMsg(){ String response = productClient.productMessage(); log.info("response={}",response); return response; }
注意,有時候會報找不到IProductClient
這個bean,此時就需要添加掃描包,這個問題在調用時經常遇到。
@EnableFeignClients(basePackages = "com.springcloud.product.client")
二:ribbon
可以看到 Feign 調用步驟比較繁瑣,並且傳參數以及經過zuul 問題較多
再來看看ribbon
只需要在 implements 接口類裏面引入一個 ribbon 均衡,再方法中調用即可
/** * www.1b23.com */ @Service @Transactional //開啓事物 public class UsersServiceImpl implements UsersService { @Autowired private LoadBalancerClient loadBalancerClient;//ribbon負載均衡器 ...... /**保存用戶 * @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); //請求數據庫表同步微服務 } }
"fh-dbsync" 是註冊到eurake裏面的服務名稱,“user/add” 微服務的 RequestMapping 完整路徑 “pd” 就是map,存放參數用的