12.基于fegin实现服务调用
2020-05-26 本文已影响0人
LANSHENGYANG
基于Feign实现服务调用
什么是Feign
- Feign是Spring Cloud提供的一个声明式的伪http客户端,它使得调用远程服务就像调用本地服务一样简单,只需要创建一个接口并添加一个注解即可。
- Nacos很好得兼容了Feign,Feign默认集成了Ribbon,所以在Nacos下使用Feign默认就是实现了负载均衡得效果。
Feign使用
- 1.加入依赖
<!--Feign依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
- 2.在主类上添加Feign得注解
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients //开启feign
public class ShopOrderApplication {}
- 3.创建一个service,并使用Feign实现微服务调用
@FeignClient(value = "service-product")
public interface ProductService {
/* @FeignClient的value + @RequestMapping的value值,其实就是一个完整的请求地址
* http://service-product/product/{pid}
*/
@RequestMapping("/product/{pid}")
Product findByPid(@PathVariable("pid") Integer pid);
}
- 4.修改controller代码,并启动验证
/**
* feign实现服务调用
* @param pid
* @return
*/
public Order order(@PathVariable("pid") Integer pid) {
log.info("接收到{}号商品的下单请求,接下来调用商品微服务查询此商品信息", pid);
Product product = productService.findByPid(pid);
log.info("查询到{}号商品的信息,内容是:{}", pid, JSON.toJSONString(product));
//下单(创建订单)
Order order = new Order();
order.setUid(1);
order.setUsername("测试用户");
order.setPid(pid);
order.setPname(product.getPname());
order.setPprice(product.getPprice());
order.setNumber(1);
orderService.createOrder(order);
log.info("创建订单成功,订单信息为{}", JSON.toJSONString(order));
return order;
}