微服务远程调用使用Feign组件
1、什么是微服务的远程调用
我们知道微服务是将不同业务的模块作为一个独立的服务,将众多的微服务一起构成整个的系统。如下图所示: 该系统包含多个微服务,而每个微服务都有一个启动类。各个服务之间互不影响。
2、问题抛出
现在存在一个问题,我们的storage微服务想要用到property微服务里面的接口,这个时候我们应该怎么办呀?这个时候就需要利用微服务的远程调用了,使我们的storage可以调用property的接口。
3.Feign组件
较RestTemplate相比,Feign提供更优雅的发送Http请求的功能,因此目前大家基本都是使用Feign组件实现远程调用,而不采用RestTemplate组件。 在使用之前我们需要 3.1引入Feign的相关依赖
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency>
3.2在客户端(也就是调用端的微服务启动类)启动类开启注解启动
@EnableRyFeignClients //开启OpenFeign注解 @SpringBootApplication public class StorageApplication { public static void main(String[] args) { SpringApplication.run(StorageApplication.class, args); System.out.println("(♥◠‿◠)ノ゙ 仓库管理模块启动成功 ლ(´ڡ`ლ)゙ " + " .-------. ____ __ " + " | _ _ \ \ \ / / " + " | ( ) | \ _. / " + " |(_ o _) / _( )_ . " + " | (_,_). __ ___(_ o _) " + " | |\ \ | || |(_,_) " + " | | \ ` /| `- / " + " | | \ / \ / " + " - `- `-..- "); } }
3.3创建接口、声明远程调用的路径
/** * 车辆服务 * @author rql */ @FeignClient(contextId = "remoteCarService", value = ServiceNameConstants.CAR_SERVICE,fallbackFactory = RemoteCarFallbackFactory.class) public interface RemoteCarService { @GetMapping("/parking/visitorCarNum") //被远程调用接口的路径 R<Integer> visitorCarNum(@RequestBody VisitorCarCountDto dto, @RequestHeader(SecurityConstants.FROM_SOURCE) String source); }
3.4调用接口
@Autowired private RemoteCarService remoteCarService ; public int NumberCar(XXX参数) { //远程调用查询 int numCar=remoteCarService .visitorCarNum(XXX参数); return numCar; }
下一篇:
maven对微服务有通用模块的子模块打包