使用Spring Cloud Feign远程调用的方法示例
在SpringCloudNetflix栈中,各个微服务都是以HTTP接口的形式暴露自身服务的,因此在调用远程服务时就必须使用HTTP客户端。我们可以使用JDK原生的URLConnection、Apache的HttpClient、Netty的异步HTTPClient,Spring的RestTemplate。但是,用起来最方便、最优雅的还是要属Feign了。
Feign简介
Feign是一个声明式的Web服务客户端,使用Feign可使得Web服务客户端的写入更加方便。
它具有可插拔注释支持,包括Feign注解和JAX-RS注解、Feign还支持可插拔编码器和解码器、SpringCloud增加了对SpringMVC注释的支持,并HttpMessageConverters在SpringWeb中使用了默认使用的相同方式。SpringCloud集成了Ribbon和Eureka,在使用Feign时提供负载平衡的http客户端。
SpringCloudFeign简介参考:https://www.nhooo.com/article/133773.htm
根据专家学者提供的账号密码,要在用户表注册一个专家学者账号(用户和专家学者不同的数据库)
在userContorller.java写一个方法:注册专家学者账号
/** *专家学者注册 * *@paramusername *@parampassword *@return */ @ApiOperation(value="专家学者注册") @RequestMapping(value="/registExpert",method=RequestMethod.POST) publiclongregistExpert(@RequestParam("username")Stringusername,@RequestParam("password")Stringpassword){ Useruser=newUser(); user.setUsername(username); user.setPassword(password); userService.insertSelective(user); longuserId=user.getUserId(); returnuserId; }
UserClient.java(这里的接口和要远程调用的controller方法声明一样(此处是UserController.java),可直接复制过来,如下所示)
packagecom.lgsc.cjbd.expert.remote.client; importorg.springframework.cloud.netflix.feign.FeignClient; importorg.springframework.web.bind.annotation.RequestMapping; importorg.springframework.web.bind.annotation.RequestMethod; importorg.springframework.web.bind.annotation.RequestParam; importcom.lgsc.cjbd.vo.Response; @FeignClient(name="cjbd-user",fallback=UserClientFallback.class) publicinterfaceUserClient{ /** *注册专家学者 */ @RequestMapping(value="/user/user/registExpert",method=RequestMethod.POST) longregistExpert(@RequestParam("username")Stringusername,@RequestParam("password")Stringpassword); }
以及失败回调用UserClientFallBack.java
packagecom.lgsc.cjbd.expert.remote.client; importorg.apache.logging.log4j.LogManager; importorg.apache.logging.log4j.Logger; importorg.springframework.stereotype.Component; importcom.lgsc.cjbd.vo.Response; /** *失败回调 * *@authoryeqj */ @Component publicclassUserClientFallbackimplementsUserClient{ privatestaticLoggerlog=LogManager.getLogger(UserClientFallback.class); @Override publiclongregistExpert(Stringusername,Stringpassword,StringrealName){ log.error("远程调用失败,注册专家学者失败,参数:[username="+username+",password="+password+"]"); return0; } }
之后再专家学者Service层传递专家学者用户名和密码过去,在用户表新增专家学者注册记录
userClient.registExpert(username,password);
即可完成远程调用
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。