SpringCloud中Feign的适配器的实现方案

前言

最近在做微服务的项目,各个系统之间需要进行调用,然后用一个适配器来实现服务之间的feign调用,使用适配器进行统一管理。

实现方案

首先我们需要将服务的名称进行单独的配置,可以方便的进行切换和扩展,我们使用bootstrap.yml来进行配置,这样引入jar包的时候,可以将配置互补到我们本身项目的application.yml中。
在我们的bootstrap.yml中进行配置。

## 配置的服务名称
server-name:
  # 配置在eureka中注册的服务名称
  feignDemo: demo

我们这里配置了一个demo,demo是spring.application.name。我们需要调用demo项目中的接口。
然后配置feign与ribbon

feign:
  hystrix:
   threadpool:
    default:
     coreSize: 100
    enabled: true
    command:
      default:
       execution:
         isolation:
          thread:
           timeoutInMilliseconds: 30000
      circuitBreaker:
       requestVolumeThreshold: 1000
ribbon:
 ConnectTimeout: 30000
 ReadTimeout: 30000

之后我们建立一个feign的接口。

@FeignClient(value = "${server-name.feignDemo}")
@Component
public interface IDemoFeign {

    @PostMapping("/demo/list")
    public List<Demo> findDemoListByQueryVO(
            @RequestBody DemoFeignQueryVO demoFeignQueryVO);

}

我们通过用$取值的方式来获取服务的名称。接口内的方法必须与服务中的方法的映射一模一样。这里需要注意的问题是参数必须要用@RequestBody或者@RequestParam来接取。
接下来建立一个controller的类。

@Component
public class DemoApi {

    @Autowired
    private IDemoFeign iDemoFeign ;

        public List<Demo> findDemoListByQueryVO(DemoFeignQueryVO demoFeignQueryVO){
            return iDemoFeign .findDemoListByQueryVO(demoFeignQueryVO);
        }

}

我们在调用的使用通过controller进行调用,这样,我们以后如果接口有什么问题,可以直接改接口,不用改调用项目的代码。
最后,我们建立主启动类,在主启动类中,配置我们刚才建立的controller类,这样打成jar包调用的时候,注入一个主启动类,然后就可以调用其他的api。
主启动类如下:

@SpringBootApplication
@EnableFeignClients
public class ApiAdapter {

    public static void main(String[] args) {
        SpringApplication.run(ApiAdapter.class, args);
    }

    @Autowired
    public DemoApi demoApi ;

}

我们需要注意的就是需要加上注解@EnableFeignClients。
实现方案结束,将其打成jar包,引入就可使用。

原文地址:https://www.cnblogs.com/jichi/p/11621472.html

时间: 2024-10-07 08:37:49

SpringCloud中Feign的适配器的实现方案的相关文章

解决:SpringCloud中Feign支持GET请求POJO传参

在日常的开发中,当遇到一个请求需要传递多个参数时,我们习惯将参数封装到一个POJO对象中,已提高程序的可读性和简化编写.但是在使用SpringCloud时,Feign对SpringMVC注解支持并不完善,其中一点就是,当发送的GET请求携带多个参数时,不能使用POJO来封装参数,这个就比较蛋疼了.一种使之支持GET请求POJO传递参数的方法如下: 添加Maven依赖 <dependency> <groupId>org.springframework.cloud</groupI

SpringCloud(5)---Feign服务调用

SpringCloud(5)---Feign服务调用 上一篇写了通过Ribbon进行服务调用,这篇其它都一样,唯一不一样的就是通过Feign进行服务调用. 注册中心和商品微服务不变,和上篇博客一样,具体参考:SpringCloud(4)---Ribbon服务调用,源码分析 这边只重写订单微服务. 一.OrderService 订单微服务 1.pom.xml 这里相对于上一篇的订单微服务只要新添加一个jar包 <!--feign依赖--> <dependency> <group

springcloud中servcie层调用fegin异常以及异步方法的实现

近日在做业务上的短信推送和APP消息推送,通过调用别的模块的接口来实现,在springcloud中通过fegin进行调用.这里要说明的事情并不是如何开发推送功能,而是在调试过程中碰到的一些小问题.我把消息推送之前的业务处理代码以及调用推送服务的代码都放在方法pushByAppAndShortMessage()中,然后把这个方法单独的放在crmservice里面.由于业务处理,pushByAppAndShortMessage中需要用到别的service,就不得不在crmservice中进行大量的a

Springcloud 中 SpringBoot 配置全集 (收藏版)

Springcloud 中 SpringBoot 配置全集 (收藏版) 疯狂创客圈 Java 高并发[ 亿级流量聊天室实战]实战系列 [博客园总入口 ] 前言 疯狂创客圈(笔者尼恩创建的高并发研习社群)Springcloud 高并发系列文章,将为大家介绍三个版本的 高并发秒杀: 一.版本1 :springcloud + zookeeper 秒杀 二.版本2 :springcloud + redis 分布式锁秒杀 三.版本3 :springcloud + Nginx + Lua 高性能版本秒杀 以

SpringCloud+Eureka+Feign+Ribbon的简化搭建流程,加入熔断,网关和Redis缓存[2]

作者:故事我忘了¢个人微信公众号:程序猿的月光宝盒 前提:本篇是基于 SpringCloud+Eureka+Feign+Ribbon的简化搭建流程和CRUD练习[1] 的修改与拓展 1.修改consumer的CenterFeign.java,把返回值全部设置为String /** * 是consumer调用provider(需要指定provider的名字) * 请求的清单列表:规定调用地址.参数.返回值 * 在正常走通的时候不走CenterFeignFallBack,当provider down

Android中万能的适配器的详细讲解

Android中万能的适配器的详细讲解 在Android开发中,适配器的用处是非常大的,尤其是效率优化方面.除了使用ViewHolder复用View之外,如果存在很多的ListView或者是一个ListView中存在很多的View组件,那对代码的阅读不是很好的.考虑到优化以及共通方面,我封装了ViewHolder类以及将Adapter类封装成共通的了,将对以后的开发带来很大的方便. (1).ViewHolder类的封装如下:ViewHolder类: package com.chengdong.s

移动应用开发(IOS/android等)中一个通用的图片缓存方案讲解(附流程图)

在移动应用开发中,我们经常会遇到从网络请求图片到设备上展示的场景. 如果每次都重复发起请求,浪费流量.浪费电量,用户体验也不佳: 将图片持久化到磁盘也不失为一种策略:但每次从文件读取图片也存在一定的io开销,就算采用此策略,我们也需要控制磁盘缓存的容量,以免占用过多系统资源. 其实没有一个方案可以说是完美的方案,只有最适合自己业务需求的方案,才可以说是一个好方案. 我们下面所讲解的方案具备很强的通用性,设计思路简单而清晰: 1.假设每个网络图片的url具有唯一性,如果网络上的图片变化了,会引起输

Springcloud中的region和zone的使用

Springcloud中的region和zone的使用 一.背景 用户量比较大或者用户地理位置分布范围很广的项目,一般都会有多个机房.这个时候如果上线springCloud服务的话,我们希望一个机房内的服务优先调用同一个机房内的服务 ,当同一个机房的服务不可用的时候,再去调用其它机房的服务,以达到减少延时的作用. 二.概念 eureka提供了region和zone两个概念来进行分区,这两个概念均来自于亚马逊的AWS: (1)region:可以简单理解为地理上的分区,比如亚洲地区,或者华北地区,再

SpringCloud中服务消费者接受前台传参问题(报错415)

服务消费者clientFeign,接受前台form表单post提交的数据,虽然传递参数是对象类型,但是后台不能添加@RequestBody注解!!!,form表单提交的数据不是json格式!!! 1. 前端 <form class="layui-form" action="/menu/save" method="post"> <div class="layui-form-item"> <label