使用FeignClient进行微服务交互方式(微服务接口互相调用)

目录
  • 使用FeignClient进行微服务交互
    • 先写一个公共方法
    • 然后写一个Feign调用
    • 被Feign调用的方法如下
  • @FeignClient调用微服务注意事项
    • FeignClient接口不能使用@GettingMapping之类的组合注解
    • FeignClient接口中如果使用到@PathVariable
    • FeignClient多参数的构造

使用FeignClient进行微服务交互

先写一个公共方法

  public String getSettingValue(String name) {
       Map<String, Object> map = (Map) settingClient.getByName(name).getData();
       return (String) map.get("value");
  }

然后写一个Feign调用

@FeignClient(value="qiang-admin")
public interface SettingClient {
    @RequestMapping(value="/setting/getSetting/{name}",method = RequestMethod.GET)
    public ReturnMsg getByName(@PathVariable("name") String name);
}

@FeignClient注解用于指定从哪个服务中调用功能 ,注意 里面的名称与被调用的服务

名保持一致,并且不能包含下划线。

@RequestMapping注解用于对被调用的微服务进行地址映射。注意 @PathVariable注

解一定要指定参数名称,否则出错。

@PathVariable:接口参数

被Feign调用的方法如下

    @RequestMapping(value="/getSetting/{name}",method = RequestMethod.GET)
    public ReturnMsg getByName(@PathVariable String name){
        Setting condition = new Setting();
        condition.setName(name);
        ReturnMsg returnMsg = new ReturnMsg<>();
        Setting setting = settingService.findByCondition(condition);
        returnMsg.setCode(ReturnIntCode.SUCCESSS_CODE);
        returnMsg.setData(setting);
        return returnMsg;
    }

@FeignClient调用微服务注意事项

在初次使用springcloud,调用微服务的时候,常常会踩坑,这里总结一下,在调用微服务的时候,常犯的几点错误及注意点:

FeignClient接口不能使用@GettingMapping之类的组合注解

@FeignClient("target-servername")
  public interface FeignClient {
       @RequestMapping(value = "/simple/{id}", method =RequestMethod.GET)
 public Object findById(@PathVariable("id") Long id);
 ...
}

这边的@RequestMapping(value = "/simple/{id}", method = RequestMethod.GET) 不能写成@GetMapping("/simple/{id}") 。因为GetMapper是一个组合注解。

FeignClient接口中如果使用到@PathVariable

必须指定其value

@FeignClient("target-servername")
public interface FeignClient {
 @RequestMapping(value = "/simple/{id}", method = RequestMethod.GET)
 public Object findById(@PathVariable("id") Long id);
 ...
}

这边的@PathVariable("id") 中的”id”,不能省略,必须指定。

FeignClient多参数的构造

如果想要请求target-servername 服务,并且参数有多个例如:http://target-servername/query-by?id=1&username=张三 要怎么办呢? 不能构造一个复杂的对象去接收,必须一个一个接收参数

@FeignClient("target-servername")
public interface UserFeignClient {
 @RequestMapping(value = "/query-by", method = RequestMethod.GET)
 public Object queryBy(@RequestParam("id")Long id, @RequestParam("username")String username);
}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • SpringBoot使用Feign调用其他服务接口

    使用SpringCloud的Feign组件能够为服务间的调用节省编码时间并提高开发效率,当服务本身不复杂时可以单独将该组件拿出使用. 引入依赖 <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-openfeign --> <dependency> <groupId>org.springframework.cloud</groupId>

  • 微服务之间如何通过feign调用接口上传文件

    具体需求: 我们的项目是基于springboot框架的springcloud微服务搭建的,后端服务技术层面整体上分为business服务和core服务,business服务用于作为应用层,直接连接客户端,通常用于聚合数据,core服务用来客户端具体操作不同需求来控制数据库,文件上传是通过客户端上传接口,通过business服务,由服务端调用feign接口,也是第一次做这种文件中转,遇到各种问题,下面是我自己的解决方案,不喜勿喷,代码小白一枚; 一.core服务层接口@requestmapping

  • 使用Feign实现微服务间文件传输

    在很多时候我们会遇到微服务之间文件传输,很多时候我们可以通过序列化等方式解决(如图片等). 最近项目中有个excel上传,以及多媒体文件上传,直接报错. 也试了2种解决方式,都不可行. 1.写一个文件Encoder解析器,会出现其他的rest请求出现encoder错误 2.springcloud feign有一个规范,不可以传输2个对象,可以是一个对象带几个参数方式. 那么我们现在需要一种方式,不配置全局的解析器,而是通过Feign Builder 去管理上传文件,这种方式管理起来也较为方便.

  • Spring-cloud-eureka使用feign调用服务接口

    Spring-cloud-eureka使用feign调用服务接口的具体方法,供大家参考,具体内容如下 基于spring-boot 2.0以上版本完成的微服务架构 pom.xml <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.5.RELEASE<

  • 使用FeignClient进行微服务交互方式(微服务接口互相调用)

    目录 使用FeignClient进行微服务交互 先写一个公共方法 然后写一个Feign调用 被Feign调用的方法如下 @FeignClient调用微服务注意事项 FeignClient接口不能使用@GettingMapping之类的组合注解 FeignClient接口中如果使用到@PathVariable FeignClient多参数的构造 使用FeignClient进行微服务交互 先写一个公共方法   public String getSettingValue(String name) {

  • 从0到1搭建后端架构的演进(MVC,服务拆分,微服务,领域驱动)

    目录 一.MVC 二.服务拆分 三.微服务架构 四.领域驱动设计 产品是一款服务于人力资源的SaaS在线服务,面向HR有Web Android/iOS 小程序多个客户端 后端采用RESTful风格API来提供服务.主要使用Python语言,方便快速迭代. 架构的演进经历了4个大的阶段: 一.MVC 项目刚开始的时候,后端同事不超过5个,这个阶段主要的工作是实现产品的原型,没有太多的考虑架构 使用Django来快速实现功能,DB的表结构设计好之后,抽象出功能View 由于产品设计也很不完善,后端需

  • 微服务架构之服务注册与发现功能详解

    目录 微服务的注册与发现 1.服务注册 2.服务发现 3.注册中心 4.现下的主流注册中心 4.1 Eureka 4.1.1 介绍 4.1.2 整体架构 4.1.3 接入Spring Cloud 4.2 ZooKeeper 4.2.1 介绍 4.2.2 整体架构 4.2.3 接入Dubbo生态 4.3 Consul 4.3.1 介绍 4.3.2 整体架构 4.3.3 生态对接 4.4 总结对比 详解微服务架构及其演进史 微服务全景架构全面瓦解 微服务架构拆分策略详解 微服务的注册与发现 我们前面

  • 微服务架构之服务注册与发现实践示例详解

    目录 1 服务注册中心 4种注册中心技术对比 2 Spring Cloud 框架下实现 2.1 Spring Cloud Eureka 2.1.1 创建注册中心 2.1.2 创建客户端 2.2 Spring Cloud Consul 2.2.1 Consul 的优势 2.2.2 Consul的特性 2.2.3 安装Consul注册中心 2.2.4 创建服务提供者 3 总结 微服务系列前篇 详解微服务架构及其演进史 微服务全景架构全面瓦解 微服务架构拆分策略详解 微服务架构之服务注册与发现功能详解

  • Go语言从单体服务到微服务设计方案详解

    目录 概述 业务场景 设计方案 Api网关 数据 Go中的Grpc使用 问题和反思 概述 微服务是一种思想,与编程语言无关,编程语言是思想下具体的一种实现方式,怎么设计架构方案和实现主要看主要面临的业务场景. 业务场景 主站核心业务使用的是yaf(php)开发的,要实现k8s + x编程语言 自主微服务实现,受到陈皓(左耳听风)的影响,我选用的编程语言是Go,Go语言有更强大的生态,有谷歌,k8s作为强大的后盾,摸着石头过河. 设计方案 Api网关 提到微服务我们就联想到Rpc,主流微服务价格设

  • Spring Cloud Zipkin服务端追踪服务

    Zipkin 简介 ZipKin 是一个开放源代码的分布式跟踪系统,用于收集服务的定时数据,以解决微服务架构中的延迟问题.包括数据的收集.存储.查找和展现. 每个服务向 Zipkin 报告计时数据,Zipkin 会根据调用关系通过 Zipkin UI 生成依赖关系图,显示了多少跟踪请求通过每个服务.该组件可以让我们通过一个 Web 前端轻松的收集和分析数据.例如用户每次请求服务的处理时间等,可方便的监测系统中存在的瓶颈. 服务追踪说明 微服务架构是通过业务来划分服务的,使用 REST 调用.对外

  • 搭建Consul服务发现与服务网格

    目录 第一部分:Consul 基础 1,Consul 介绍 2,安装 Consul Ubuntu/Debian 系统 Centos/RHEL 系统 检查安装 3,运行 Consul Agent 启动 agent 发现数据中心成员 查看 UI 4,在 Consul Service Discovery 中注册服务 端口 定义服务 使用配置启动服务 如何重新加载配置文件 5,查询服务 通过 HTTP API 通过 UI 查询 6,DNS 知识与查询基础知识 基础知识 通过 DNS 查询 Consul

  • SpringCloud Eureka服务治理之服务注册服务发现

    目录 什么是Eureka Eureka核心概念服务注册和服务发现 服务注册 服务发现 Eureka实战 Eureka服务端单节点构建 Eureka服务端集群构建 Eureka客户端构建 什么是Eureka Netflix Eureka 是一款由 Netflix 开源的基于 REST 服务的注册中心,用于提供服务发现功能.Spring Cloud Eureka 是 Spring Cloud Netflix 微服务套件的一部分,基于 Netflix Eureka 进行了二次封装,主要负责完成微服务架

  • python实现监控windows服务并自动启动服务示例

    使用Python 2.7 + pywin32 + wxpython开发 每隔一段时间检测一下服务是否停止,如果停止尝试启动服务.进行服务停止日志记录 AppMain.py 复制代码 代码如下: #!/usr/bin/env python#-*- encoding:utf-8 -*- """1. 每隔一分钟检测一次服务状态2. 如果发现服务状态已经停止,那么尝试启动服务3. 自动记录日志4. 任务栏图标显示""" import sys;reload

  • VS2013创建Windows服务与调试服务的图文方法

    1.创建Windows服务 说明: a)Description 服务描述,直接显示到Windows服务列表中的描述: b)DisplayName 服务显示名称,直接显示到Windows服务列表中的名称: c)ServiceName 服务进程名称,安装与卸载服务时的唯一标识. 单击"serviceProcessInstaller1",在其属性窗口中设置Account帐号方式,建议为LocalService(当然也可以Account属性改为 LocalSystem,这样,不论是以哪个用户登

随机推荐