feign调用多个服务_Spring Cloud 快速入门系列之feign–微服务之间的调用

我们将一个大的应用拆成多个小的服务之后,紧接着的一个问题就是,原本都在一个项目里,方法我可以随便调用,但是拆开后,原来的方法就没法直接调用了,这时候要怎么办?

Spring Cloud提供了feign,能够轻松解决这个问题,feign能让我们调用远程服务方法就像调用本地方法一样,调用者完全感觉不到实在调用远程服务。

其底层其实就是使用了RPC,对网络的请求和响应做了解析,在这里对RPC先不做讲解,我们重点来了解如何使用feign来调用其他微服务。

feign这个功能是不是听起来很神奇,但是用起来确实很简单,我们一起来看看。

实操O(∩_∩)O

1、首先复制一个service-a的项目,我们起名叫service-b

2、在service-b的pom.xml文件中,添加feign的依赖

org.springframework.cloud

spring-cloud-starter-openfeign

3、在应用主类添加@EnableFeignClients,开启feign支持

package com.itzhimei.serviceb;

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

import org.springframework.cloud.openfeign.EnableFeignClients;

@EnableFeignClients

@EnableDiscoveryClient

@SpringBootApplication

public class ServiceBApplication {

public static void main(String[] args) {

SpringApplication.run(ServiceBApplication.class, args);

}

}

4、在service-b中添加一个抽象接口ServiceA

package com.itzhimei.serviceb.feign;

import org.springframework.cloud.openfeign.FeignClient;

import org.springframework.web.bind.annotation.GetMapping;

@FeignClient("service-a")

public interface ServiceA {

@GetMapping(value = "/getInfo")

public String getInfo();

}

这个接口的作用就是,让serviceb调用servicea的方法就像调用本地方法一样。class上的注解@FeignClient(“service-a”),就表示通过serviceA的serviceId,找到serviceA服务,通过@GetMapping(value = “/getInfo”)来对应到serviceA中的方法。

5、最后就是调用ServiceA了,写一个调用的Controller

package com.itzhimei.serviceb.controller;

import com.itzhimei.serviceb.feign.ServiceA;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestMethod;

import org.springframework.web.bind.annotation.RestController;

@RestController

public class ServiceBController {

@Autowired

ServiceA serviceA;

@RequestMapping(value="helloFeign", method = RequestMethod.GET)

public String helloFeign() {

return serviceA.getInfo();

}

}

输出结果:名字是:张三,年龄是:20

到这里,微服务的相互调用就成功了,是不是超级简单,通过几步配置,就完成了原来复杂的网络之间的调用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/396349.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Asix下日志包冲突

为什么80%的码农都做不了架构师?>>> Class org.apache.commons.logging.impl.SLF4JLogFactory does not implement org.apache.commons.logging. 最近集成asix包的时候发生如下错误,原因是程序运行时logFactoryImple加载了JBOSS下面的sff4j包…

kubernetes中mysql乱码_在kubernetes中部署tomcat与mysql集群-Go语言中文社区

在kubernetes中部署tomcat与mysql集群之前必须要有以下这些基础:1. 已安装、配置kubernetes2. 集群中有tomcat与mysql容器镜像3. 有docker基础具体步骤部署tomcat创建tomcat RC对象我们想要在kubernetes集群中配置tomcat服务器,首先要保证集群中的节点上…

c# 测试运行时间毫秒级

long currentMillis (DateTime.Now.Ticks - (new DateTime(1970, 1, 1, 0, 0, 0, 0)).Ticks) / 10000;/*代码*/long currentMillis1 (DateTime.Now.Ticks - (new DateTime(1970, 1, 1, 0, 0, 0, 0)).Ticks) / 10000;MessageBox.Show((currentMillis1 - currentMillis).ToStri…

nodejs_NodeJS历险记

nodejsby Elliott McNary埃利奥特麦克纳里(Elliott McNary) NodeJS历险记 (Adventures in NodeJS) I built an app a couple of weeks ago after going through FreeCodeCamp’s Front-End curriculum and wanted to write an update as I head into NodeJS-land. I was final…

pytdx 获取板块指数_能否增加一个通过股票代码,板块指数代码获得中文名称的接口?...

T0002/hq_cache/shex.tnfT0002/hq_cache/szex.tnf这个解码就是。/***************************************************股票代码列表和股票名称T0002/hq_cache/shex.tnfT0002/hq_cache/szex.tnf***************************************************/struct TdxSymbolMap {cha…

灵动标签调用友情链接

1、文字形式[e:loop{select * from [!db.pre!]enewslink where checked1 and classid1 order by myorder,20,24,0}] <li><a href"<?$bqr[lurl]?>" title"<?$bqr[lname]?>" target"_blank"><?$bqr[lname]?>&…

4-----Scrapy框架中选择器的用法

Scrapy提取数据有自己的一套机制&#xff0c;被称作选择器&#xff08;selectors&#xff09;,通过特定的Xpath或者CSS表达式来选择HTML文件的某个部分Xpath是专门在XML文件中选择节点的语言&#xff0c;也可以用在HTML上。CSS是一门将HTML文档样式化语言&#xff0c;选择器由它…

【原】Jenkins持续集成环境搭建之创建java项目的job【centos6.5 java maven git 项目】...

一、构建一个maven项目在jenkins主页上&#xff0c;左侧&#xff0c;选择“新建”&#xff0c;然后填写项目名称&#xff0c;选择“构建一个maven项目”二、Git配置保存之后&#xff0c;进入详细配置页面&#xff1a;这里的源码管理&#xff1a;选择git&#xff0c;输入代码的g…

linux修改java内存大小_Linux 和 windows修改java虚拟机内存大小

1、Java内存区域划分&#xff1a; 运行时的数据区:方法区和堆(各个线程共享的内存区域)&#xff0c;程序计数器、Java虚拟机栈和本地方法栈(线程私有的) 程序计数器&#xff1a;当前线程所执行字节码的行号指示器&#xff0c;字节码解释器就是通过改变计算器的值来选取下一条需…

html制作彩虹_制作彩虹

html制作彩虹by Gil Fewster吉尔弗斯特(Gil Fewster) 制作彩虹 (Making rainbows) This is a story about curiosity. It’s also about what happens when you stick a needle into your eye. If you happen to be eating a handful of grapes right this moment, maybe come…

python3 set_python3.x 基础三:set集合

| clear(...) 清空一个集合| Remove all elements from this set.>>>set1.clear()>>>set1set()| copy(...) 影子复制&#xff0c;指向同一个内存地址| Return a shallow copy of a set. |>>> list1[3, 2, 1, 1, 2, 3, 4, 5]>>>…

Linux内核分析作业第八周

进程的切换和系统的一般执行过程 一、进程调度的时机 中断处理过程&#xff08;包括时钟中断、I/O中断、系统调用和异常&#xff09;中&#xff0c;直接调用schedule()&#xff0c;或者返回用户态时根据need_resched标记调用schedule()&#xff1b; 内核线程可以直接调用sched…

iOS--数据存储NSUserDefaults

2019独角兽企业重金招聘Python工程师标准>>> 今天去面试&#xff0c;被问道NSUserDefaults的存取并手写出来&#xff0c;一时想不起来&#xff0c;回来之后看看之前的笔记&#xff0c;稍作一些整理 NSUserDefaults是一个单例&#xff0c;在整个程序中只有一个实例对…

巨人肩膀_如何站在巨人的肩膀上

巨人肩膀“If I have seen further than others, it is by standing on the shoulders of giants.” — Isaac Newton“如果我能比其他人看到更多&#xff0c;那就是站在巨人的肩膀上。” —艾萨克牛顿 In 1676, Isaac Newton spoke of the great thinkers who came before him…

mysql 触发器定义变量_MySQL 函数存储过程触发器定义简单示例

1.变量提示NEW 是新值-- OLD 是旧值INSERT 只有NEW ----UPDATE有NEW和OLD ---DELETE只有OLD2.准备测试表(userinfo、userinfolog)use test;create table userinfo(userid int,username varchar(10),userbirthday date);create table userinfolog(logtime datetime,loginfo varc…

[EOJ439] 强制在线

Description 见EOJ439 Solution 先考虑不强制在线怎么做。 按询问区间右端点排序&#xff0c;从左往右扫&#xff0c;维护所有后缀的答案。 如果扫到 \(a[i]\)&#xff0c;那么让统计个数的 \(cnt[a[i]]\). 如果\(cnt[a[i]]<a[i]\)&#xff0c;那么在当前的右端点固定的情况…

大数据 就业 缺口_中国AI&大数据就业趋势报告:平均月薪超2万,缺口650万人...

2019世界人工智能大会开幕式上&#xff0c;特斯拉公司联合创始人兼首席执行官Elon Musk 和中国企业家俱乐部主席、联合国数字合作高级别小组联合主席马云进行了一场“双马”对话。谈到人工智能话题时&#xff0c;马斯克认为&#xff0c;“未来的科技发展变化将超越我们的能力”…

Android pm 命令详解

一、pm命令介绍与包名信息查询 1.pm命令介绍 pm工具为包管理&#xff08;package manager&#xff09;的简称 可以使用pm工具来执行应用的安装和查询应用宝的信息、系统权限、控制应用 pm工具是Android开发与测试过程中必不可少的工具&#xff0c;shell命令格式如下&#xff1a…

开源 非开源_开源为善

开源 非开源by Michael D. Johnson迈克尔约翰逊(Michael D.Johnson) 开源为善 (Open Source for Good) We’ve spent two years coding for a cause, one nonprofit at a time. And now Free Code Camp’s pushing ahead to help organizations at scale.我们花了两年的时间为…

mysql5.6热升级_Mysql5.6主从热备配置

数据库是应用系统的核心&#xff0c;为了保证数据库的安全采用主从热备是很常见的方法&#xff0c;也就是主数据库DDL、DML都将被同步到从数据库。一、 实验环境操作系统&#xff1a;windowsserver 2008 R2数据库&#xff1a;mysql-advanced-5.6.21-winx64二、 准备工作1、…