本文共 2840 字,大约阅读时间需要 9 分钟。
Feign是Netflix公司开源的轻量级rest客户端,使用Feign可以非常方便的实现Http 客户端。Spring Cloud引入Feign并且集成了Ribbon实现客户端负载均衡调用(Feign和restTemplate都是一种客户端远程调用工具,但Feign结合了Ribbon实现了负载均衡)
前面我们实现微服务调用的是结合restTemplate远程调用和Ribbon客户端负载均衡,
@Autowired RestTemplate restTemplate; /** * 测试客户端负载均衡ribbon */ @Test public void test05() { //服务ID String serviceId = "XC-SERVICE-MANAGE-CMS"; //ribbon从eureka获取服务列表 for(int i=0; i<10; i++){ ResponseEntity
但这样编写代码不利于管理统一与多次调用。 我们需要将这些调用方法写在一个接口上,方便调用方随时随地的调用。
!--这个包包含了spring-cloud-starter-ribbon-->< org.springframework.cloud spring-cloud-starter-openfeign com.netflix.feign feign-okhttp
package com.xuecheng.manage_course.client;/** * @author Huang * @version 1.0 * @date 2020/4/15 13:35 */import com.xuecheng.framework.domain.cms.CmsPage;import org.springframework.cloud.openfeign.FeignClient;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.PathVariable;//指定调用的服务名(即被调用微服务的spring.appliaction.name,作为注册中心的域名)@FeignClient(value = "XC-SERVICE-MANAGE-CMS")public interface CmsPageClient { //根据页面ID查询页面信息,远程调用cms微服务请求数据 @GetMapping("/cms/page/get/{id}") //表示远程调用http的方法类型(如:restTemplate.getForEntity()、restTemplate.postForEntity()等等) //如何知道远程调用http的方法类型和该方法的返回值类型呢?通过SwaggerUI查询对应微服务的接口即可获取该方法的详情信息 public CmsPage findCmsPageById(@PathVariable("id") String id);}
1)、@FeignClient:指定调用服务的域名
2)、通过查询接口文档工具(Swagger)来查看该方法的http请求方式和该方法的返回值类型
http请求方式:get、post、delete、putserver: port: 80 #端口号(网页的端口一般默认80,避免用户额外添加端口访问)spring: application: name: cloud-consumer-feign-order80 #服务名(作为注册中心的微服务名)CLOUD-PAYMENT-SERVICE: #设置OpenFeign中Ribbon负载均衡策略("CLOUD-PAYMENT-SERVICE"是服务名) ribbon: NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRuleribbon: #设置OpenFeign客户端调用远程接口超时配置(OpenFeign默认支持Ribbon) ReadTimeout: 5000 #处理请求的超时时间 ConnectTimeout: 5000 #连接建立的超时时长 MaxAutoRetries: 1 #同一台实例的最大重试次数,但是不包括首次调用,默认为1次 MaxAutoRetriesNextServer: 0 #重试负载均衡其他实例的最大重试次数,不包括首次调用,默认为0次 OkToRetryOnAllOperations: false #是否对所有操作都重试,默认false
@Autowired CmsPageClient cmsPageClient; /** * 测试Feign */ @Test public void test06() { //发起远程调用 CmsPage cmsPage = cmsPageClient.findCmsPageById("5a754adf6abb500ad05688d9"); System.out.println(cmsPage); }
只需要像接口调用方法那样即可(和DAO有雷同之处)
转载地址:http://lbern.baihongyu.com/