若是你的项目使用了SpringCloud微服务技术,那么你就可使用Feign来做为http客户端来调用远程的http服务。固然,若是你不想使用Feign做为http客户端,也可使用好比JDK原生的URLConnection、Apache的Http Client、Netty的异步HTTP Client或者Spring的RestTemplate。spring
那么,为何咱们要使用Feign呢?json
首先咱们的项目使用了SpringCloud技术,而Feign能够和SpringCloud技术无缝整合。而且,你一旦使用了Feign做为http客户端,调用远程的http接口就会变得像调用本地方法同样简单。api
下面就看看Feign是怎么调用远程的http服务的吧。微信
(1)首先你得引入Feign依赖的jar包:app
gradle依赖:异步
compile "org.springframework.cloud:spring-cloud-netflix-core:1.3.2.RELEASE"
Maven依赖:ide
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-netflix-core</artifactId> <version>1.3.2.RELEASE</version> </dependency>
(2)在properties配置文件中配置要调用的接口的URL路径(域名部分)微服务
url.xapi=http://xapi.xuebusi.com
(2)声明要调用的远程接口gradle
/** * Created by SYJ on 2017/8/11. */ @FeignClient(name = "xapi", url = "${url.xapi}") @RequestMapping(value = "/Resume", produces = {"application/json;charset=UTF-8"}) public interface ResumeClient { @RequestMapping(value = "/OperateResume", method = RequestMethod.POST) ResultModel sendInterviewRD(@RequestBody FeedBackDto feedBackDto); }
说明:url
@FeignClient 是Feign提供的注解,用于通知Feign组件对该接口进行代理(不须要编写接口实现),使用者可直接经过@Autowired注入。
@RequestMapping 是Spring提供的注解,这里能够直接使用之前使用SpringMVC时用过的各类注解,惟一不一样的是,这里只是把注解用在了接口上。
若是将Feign与Eureka组合使用,@FeignClient(name = "xapi")意为通知Feign在调用该接口方法时要向Eureka中查询名为 xapi 的服务,从而获得服务URL,
可是远程的http接口并非咱们本身的,咱们没法把它注册到Eureka中,因此这里咱们就使用 url = "${url.xapi}" 把要调用的接口的url域名部分直接写死到配置文件中。
下面就开始调用吧:
Service部分:
/** * Created by SYJ on 2017/4/26. */ @Service public class InterviewServiceImpl implements InterviewService { @Autowired private ResumeClient resumeClient; @Override public ResultModel sendInterviewRD(FeedBackDto feedBackDto) { return resumeClient.sendInterviewRD(feedBackDto); } }
Controller部分:
/** * Created by SYJ on 2017/4/25. */ @Controller @RequestMapping(value = "/interview", produces = {"application/json;charset=UTF-8"}) public class InterviewController extends BaseController { @Autowired private InterviewService interviewService; /** * Created by SYJ on 2017/4/25. * @param request * @param invitationVo * @return */ @RequestMapping(method = RequestMethod.POST, value = "/sendinterview", produces = {"application/json;charset=UTF-8"}) @ResponseBody public ResultModel sendInterview(HttpServletRequest request, @RequestBody InvitationVo invitationVo) { return interviewService.sendInterviewRD(feedBackDto); } }
若是以为本文对您有帮助,不妨扫描下方微信二维码打赏点,您的鼓励是我前进最大的动力: