Feign 實現遠程調用 以及 ribbon 的調用方式

一: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一樣。

  1. 使用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,存放參數用的


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章