博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(三)微服务:OpenFeign/Feign (OpenFeign->Eureka->微服务)
阅读量:3921 次
发布时间:2019-05-23

本文共 2840 字,大约阅读时间需要 9 分钟。

什么是Feign?

Feign是Netflix公司开源的轻量级rest客户端,使用Feign可以非常方便的实现Http 客户端。Spring Cloud引入Feign并且集成了Ribbon实现客户端负载均衡调用(FeignrestTemplate都是一种客户端远程调用工具,但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 map = restTemplate.getForEntity("http://" + serviceId + "/cms/page/get/5a754adf6abb500ad05688d9", Map.class); Map body = map.getBody(); System.out.println(body); } }

但这样编写代码不利于管理统一与多次调用。

我们需要将这些调用方法写在一个接口上,方便调用方随时随地的调用。

因此我们采用Feign结合Ribbon来取代掉之前的调用方式

1、引入依赖

!--这个包包含了spring-cloud-starter-ribbon-->
<
org.springframework.cloud
spring-cloud-starter-openfeign
com.netflix.feign
feign-okhttp

2、启动类添加 @EnableFeignClients 开启Feign服务

3、调用服务方法接口配置(注意,是接口哦)

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、put

4、yml

server:  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

5、测试

@Autowired    CmsPageClient cmsPageClient;    /**     * 测试Feign     */    @Test    public void test06() {
//发起远程调用 CmsPage cmsPage = cmsPageClient.findCmsPageById("5a754adf6abb500ad05688d9"); System.out.println(cmsPage); }

只需要像接口调用方法那样即可(和DAO有雷同之处)

注意!远程调用的返回值一定要有无参构造方法,否则返回失败!

转载地址:http://lbern.baihongyu.com/

你可能感兴趣的文章
模式10. 观察者模式-Java
查看>>
剑指 Offer 09. 用两个栈实现队列
查看>>
模式12.状态模式-Java
查看>>
Volatile-1.保证可见性
查看>>
Volatile-2.不保证原子性
查看>>
剑指 Offer 25. 合并两个排序的链表
查看>>
剑指 Offer 26. 树的子结构
查看>>
剑指 Offer 27. 二叉树的镜像
查看>>
剑指 Offer 29. 顺时针打印矩阵
查看>>
剑指 Offer 31. 栈的压入、弹出序列
查看>>
剑指 Offer 32 - III. 从上到下打印二叉树 III
查看>>
剑指 Offer 33. 二叉搜索树的后序遍历序列
查看>>
剑指 Offer 68 - I. 二叉搜索树的最近公共祖先
查看>>
剑指 Offer 68 - II. 二叉树的最近公共祖先
查看>>
剑指 Offer 18. 删除链表的节点
查看>>
剑指 Offer 32 - II. 从上到下打印二叉树 II
查看>>
杭电oj-2011 多项式求和 C++
查看>>
杭电oj-2014 青年歌手大奖赛_评委会打分 C++
查看>>
杭电oj-2015 偶数求和 C++
查看>>
杭电oj-2016 数据的交换输出 C++
查看>>