SpringCloudAlibaba-服務調用Feign


簡介

Feign是Spring Cloud提供的一個聲明式的偽Http客戶端, 它使得調用遠程服務就像調用本地服務一樣簡單, 只需要創建一個接口並添加一個注解即可。

Nacos很好的兼容了Feign, Feign默認集成了 Ribbon, 所以在Nacos下使用Fegin默認就實現了負載均衡的效果。

Fegin的使用:加入pom依賴

<!--fegin組件-->
<dependency>
     <groupId>org.springframework.cloud</groupId>
     <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

啟動類加入Fegin注解

@SpringBootApplication
@EnableDiscoveryClient //服務注冊
@EnableFeignClients    //開啟fegin
public class OrderApplication {···}

創建商品服務的api接口並使用Fegin實現微服務調用

@FeignClient("service-product")//聲明調用的提供者的name
public interface ProductApiService {
    /**
     * 指定調用提供者的哪個方法
     * @FeignClient+@GetMapping 就是一個完整的請求路徑 http://service-product/product/{pid}
     * @param pid
     * @return
     */
    @GetMapping("/product/{pid}")
    Product getByPid(@PathVariable("pid") Integer pid);

}

改造下單方法測試

    @Autowired
    private ProductApiService productApiService;

    /**
     * 基於fegin實現遠程服務調用
     * @param pid
     * @return
     */
    @GetMapping("/prod/{pid}")
    public Order order(@PathVariable("pid") Integer pid){
        log.info(">>>客戶下單,調用商品微服務查詢商品信息<<<");
        Product product = productApiService.getByPid(pid);
        log.info(">>商品信息,查詢結果:" + JSON.toJSONString(product));
        Order order = new Order();
        order.setUid(1);
        order.setUsername("測試用戶1");
        order.setPid(product.getPid());
        order.setPname(product.getPname());
        order.setPprice(product.getPprice());
        order.setNumber(1);
//        orderService.save(order);
        return order;
    }

啟動服務測試接口是否正常調用

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM