Spring Cloud进阶之路 | 四:服务消费者(feign)
Posted 银河架构师
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring Cloud进阶之路 | 四:服务消费者(feign)相关的知识,希望对你有一定的参考价值。
转载请注明作者及出处:
作者:银河架构师
原文链接:https://www.cnblogs.com/luas/p/12111916.html
feign简介
github说明
Feign is a Java to Http client binder inspired by Retrofit, JAXRS-2.0, and WebSocket. Feign\'s first goal was reducing the complexity of binding Denominator uniformly to Http APIs regardless of ReSTfulness.
Feign是一种声明式、模板化的HTTP客户端。能让编写服务客户端更加简单,同时也支持JAX-RS标准的注解和WebSocket,也支持可拔插式的编码器和解码器。
而Spring Cloud对Feign进行了封装,使其支持了Spring MVC标准注解和HttpMessageConverter。Feign集成了ribbon,故而可以借助注册中心,轮询实现客户端负载均衡。定义客户端只需使用@FeignClient注解声明式绑定接口,进而优雅而简单的实现IOC注入并调用。
创建服务提供者
使用前一篇文章的商品工程xmall-product作为服务提供者,启动双实例,供负载均衡使用。如何启动双实例,请参见另外一篇文章:Spring Boot工程如何在IDEA中启动多实例。
先启动8080端口的xmall-product工程,修改端口号为8081,并启动第二个实例。查看nacos,已有2个实例注册:
创建服务消费者
创建服务消费者工程xmall-product-clients-feign,作为服务消费者,调用商品服务。
pom
其父工程正是上一篇文章中创建的父工程java-boot-parent-2.1。
yml
依然注册到nacos,端口为8083。
创建客户端
创建SkuService,service id为商品服务服务名xmall-product。关于FeignClient注解中的关键参数、常见注意事项、常见问题等后续会出专门文章来说明,本文不再赘述。
package com.luas.xmall.product.clients.clients; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; @FeignClient(name = "xmall-product") public interface SkuService { @RequestMapping(value = "/sku/{skuId}", method = RequestMethod.GET) Object info(@PathVariable("skuId") String skuId); }
创建测试入口
创建SkuController,注入上一步创建的SkuService客户端,来测试是否生效。
package com.luas.xmall.product.clients.controller; import com.luas.xmall.product.clients.clients.SkuService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("/sku") public class SkuController { @Autowired private SkuService skuService; @RequestMapping("/{skuId}") public Object info(@PathVariable String skuId) { return this.skuService.info(skuId); } }
浏览器访问http://localhost:8082/sku/1122,多次刷新页面,可发现负载均衡生效,商品信息来自于不同端口的实例。
源码
github
https://github.com/liuminglei/SpringCloudLearning/tree/master/04/
gitee
https://gitee.com/xbd521/SpringCloudLearning/tree/master/04/
正文完!
微信搜索【银河架构师】,发现更多精彩内容。
技术资料领取方法:关注公众号,回复微服务,领取微服务相关电子书;回复MK精讲,领取MK精讲系列电子书;回复JAVA 进阶,领取JAVA进阶知识相关电子书;回复JAVA面试,领取JAVA面试相关电子书,回复JAVA WEB领取JAVA WEB相关电子书。
以上是关于Spring Cloud进阶之路 | 四:服务消费者(feign)的主要内容,如果未能解决你的问题,请参考以下文章
四集成专业应用,实现对消费者的连接洞察与服务 java版Spring Cloud+SpringBoot+mybatis+uniapp b2b2c 多商户入驻商城 直播 电子商务