笔记
5、微服务调用方式之feign 实战 订单调用商品服务 简介:改造电商项目 订单服务 调用商品服务获取商品信息 Feign: 伪RPC客户端(本质还是用http) 官方文档: https://cloud.spring.io/spring-cloud-openfeign/ 1、使用feign步骤讲解(新旧版本依赖名称不一样) 加入依赖 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> 启动类增加@EnableFeignClients 增加一个接口 并@FeignClient(name="product-service") 2、编码实战 3、注意点: 1、路径 2、Http方法必须对应 3、使用requestBody,应该使用@PostMapping 4、多个参数的时候,通过@RequestParam("id") int id)方式调用开始
feign是一个发http请求的客户端。从order service发送请求到Product service
建议大家去看官方文档:官方文档: https://cloud.spring.io/spring-cloud-openfeign/ 首先需要加依赖的包 启动类加注解 下面ribbon的方法可删可不删。这里先保留着 service下新增ProductClient。他的类形式Interface接口类 增加注解。里面的name的值就是调用的服务的名称 product的服务启动两个一个 8772 一个8773. 看到注册中心启动了两个服务调用client
调用client里面的方法。获取到的是json字符串。
需要一个json工具类。新建utils包然后新建JsonUtils类 spring默认的是用jackson这个包解析json。注意这些都是jackson这个包下的。注意这里定义的ObjectMapper用了final修饰 解析json的字符串返回一个JsonNode对象 在这里我们断点调试一下 请求到的数据 JsonNode的数据格式 在jsonNode里面获取json属性的值,分别get name 的值和get 里面的price的值 发送请求注意事项
这里也可以使用RequestMapping不过要指定value和method 多个参数的时候,通过@RequestParam("id") int id)方式调用。 参数一定要和调用的product的方法的参数保持一致 如果product的服务参数使用了requestBody那么orderService上面的注解一定要使用postMapping了。因为requestBody接收的就是post过来的参数。这里必须用PostMapping来修饰了 复杂的调用可以百度一下找对应的文章看。