feign和ajax,SpringCloud-feign 声明式服务调用

以前学习java,一般就一个后端,都要学习如何在容器中运行,如tomcat,weblogic,现在微服务颠覆了这一切,一个系统要被拆分成多个服务,服务与服务间需要通信,让我想到了前端的ajax,java里可没js那样方便,一般使用resttemplate,httpclient。现在springcloud又带来了一种新的服务调用方式--feign。

下面,我们创建一个工程测试feign,先启动前面讲的注册中心,feign客户端作为一个消费端,还需要一个提供端。

创建消费端,工程依赖如下(这里使用boot1.5.x):

dependencyManagement {

imports {

mavenBom 'org.springframework.cloud:spring-cloud-dependencies:Edgware.SR4'

}

}

dependencies {

compile('org.springframework.boot:spring-boot-starter')

compile('org.springframework.boot:spring-boot-starter-web')

compile 'org.slf4j:slf4j-api:1.7.14'

compile('org.springframework.cloud:spring-cloud-starter-eureka')

compile('org.springframework.cloud:spring-cloud-starter-feign')

testCompile('org.springframework.boot:spring-boot-starter-test')

}

接着配置端口并注册到注册中心,如下:

spring.application.name=feign-consumer

# 单机

eureka.client.serviceUrl.defaultZone=http://localhost:1111/eureka/

server.port=8083

启动类加上注解,一个用于服务发现,一个用于feign客户端,可通过EnableFeignClients调用其他服务的api,如下:

@EnableFeignClients

@EnableDiscoveryClient

@SpringBootApplication

public class CloudApplication {

public static void main(String[] args) {

SpringApplication.run(CloudApplication.class, args);

}

}

接着编写service,如下:

@FeignClient(name="HELLO-SERVICE", fallback = HelloServiceFallback.class)

public interface HelloService {

@RequestMapping("/hello")

String hello();

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

String hello(@RequestParam("name") String name) ;

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

User hello(@RequestHeader("name") String name, @RequestHeader("age") Integer age);

@RequestMapping(value = "/hello3", method = RequestMethod.POST)

String hello(@RequestBody User user);

}

上面定义一个feign客户端,它指定了要消费的服务名以及降级的处理类,若调用service.hello()则会发起对应请求:http://HELLO-SERVICE/hello

降级处理类也很简单,只需实现service接口即可。

@Component

public class HelloServiceFallback implements HelloService {

@Override

public String hello() {

return "error";

}

@Override

public String hello(@RequestParam("name") String name) {

return "error";

}

@Override

public User hello(@RequestHeader("name") String name, @RequestHeader("age") Integer age) {

return new User("nothing", 0);

}

@Override

public String hello(@RequestBody User user) {

return "error";

}

}

其实上面的方法,实现比较繁琐,我们可以用更简单的方式,如下,

@RequestMapping("/refactor")

public interface HelloService {

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

String hello(@RequestParam("name") String name) ;

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

User hello(@RequestHeader("name") String name, @RequestHeader("age") Integer age);

@RequestMapping(value = "/hello3", method = RequestMethod.POST)

String hello(@RequestBody User user);

}

上面我们重构了service接口,将所有requestMapping写入,其实与上面的变化也不大,最主要的区别是它可以被多模块共享,可以以最简方式创建feignClient,下面看下feignClient的实现,如下:

@FeignClient(value = "HELLO-SERVICE")

public interface RefactorHelloService extends HelloService {

}

这样是不是很简单呢

下面我们编写controller,只需注入上面的服务即可。

@RestController

public class ConsumerController {

@Autowired

HelloService helloService;

@Autowired

RefactorHelloService refactorHelloService;

@RequestMapping(value = "/feign-consumer", method = RequestMethod.GET)

public String helloConsumer() {

return helloService.hello();

}

@RequestMapping(value = "/feign-consumer2", method = RequestMethod.GET)

public String helloConsumer2() {

StringBuilder sb = new StringBuilder();

sb.append(helloService.hello()).append("\n");

sb.append(helloService.hello("DIDI")).append("\n");

sb.append(helloService.hello("DIDI", 30)).append("\n");

sb.append(helloService.hello(new User("DIDI", 30))).append("\n");

return sb.toString();

}

@RequestMapping(value = "/feign-consumer3", method = RequestMethod.GET)

public String helloConsumer3() {

StringBuilder sb = new StringBuilder();

sb.append(refactorHelloService.hello("MIMI")).append("\n");

sb.append(refactorHelloService.hello("MIMI", 20)).append("\n");

sb.append(refactorHelloService.hello(new User("MIMI", 20))).append("\n");

return sb.toString();

}

}

上面主要讲了消费服务的创建,提供服务的创建请参考另一篇文章 SpringCloud-service 服务提供

学习交流,请加群:64691032

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

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

相关文章

WebService学习笔记---CXF入门

2019独角兽企业重金招聘Python工程师标准>>> 一、准备 软件环境&#xff1a; JDK1.8, Eclipse JEE 4.4, Maven-3.2.5, Spring-4, CXF-3.1.5 二、创建项目 新建一个Maven项目&#xff0c;在pom.xml里添加spring依赖<dependencyManagement><dependencies>…

提供程序未返回 ProviderManifestToken 字符串

我这是在学习MVC3.0时出现的错误&#xff0c;其实呢这个问题主要是因为web.config配置文件访问数据库的时候连接出错造成的 <connectionStrings> <add name"ApplicationServices" connectionString"data source.\SQLEXPRESS;Integrated Sec…

.NET 6新特性试用 | ArgumentNullException卫语句

前言在前面的文章中&#xff08;《可空引用类型》&#xff09;&#xff0c;我们介绍过编译器会帮我们检查空引用&#xff0c;但是仅仅是警告。最好的方式还是在运行时用卫语句进行检查&#xff1a;private void Test(WeatherForecast weatherForecast) {if (weatherForecast n…

JSP之EL表达式详细介绍

一、JSP EL语言定义 E L&#xff08;Expression Language&#xff09; 目的&#xff1a;为了使 JSP写起来更加简单。 表达式语言的灵感来自于 ECMAScript 和 XPath 表达式语言&#xff0c;它提供了在 JSP 中简化表达式的方法。它是一种简单的语言&#xff0c;基于可用的命名空…

那一年,爱因斯坦输得很惨很惨,被十几个诺奖得主怼了一遍后,退出了群聊……...

全世界只有3.14 % 的人关注了爆炸吧知识科学家撕逼原来这么刺激“遇事不决&#xff0c;量子力学”&#xff0c;作为长期在民间被调侃的学科&#xff0c;量子力学的名声不小&#xff0c;但它究竟有多重要&#xff0c;又是怎么来的&#xff0c;却少有人了解。而说到量子力学&…

带有帐号密码验证的apche服务器文件下载

2019独角兽企业重金招聘Python工程师标准>>> 使用python访问 #!/usr/bin/python #fileencoding:utf-8def testUrl():import urllib2import sysimport reimport base64from urlparse import urlparse#下载路径theurl http://ip/release/LHJH/Server/er_service.waru…

00截断上传绕过_小谈截断上传漏洞

0x00 前言小菜今天在测试网站的时候&#xff0c;发现存在上传点&#xff0c;于是尝试各种姿势&#xff0c;环境为iis7.5&#xff0c;于是乎来一个解析漏洞&#xff0c;发现并不可以&#xff0c;最终百度乎&#xff0c;发现上传有很多种利用方法&#xff0c;所以小菜就去学习了一…

使用keytool查看Android APK签名

文章目录 一、找到JDK位置二、使用方法2.1 打开windows命令行工具2.2 查看签名 三、如何给APK做系统签名呢? 一、找到JDK位置 安卓AS之后&#xff0c;可选择继续安装JDK&#xff0c;如本文使用amazon版本默认位置&#xff1a;C:\Users\66176.jdks\corretto-1.8.0_342可通过自…

exchange服务器维护模式命令,Exchange服务器系列课程之七--维护邮件服务器(二)

继续上次的讨论&#xff0c;上次讨论了邮件服务器的一些监控和排错手段&#xff0c;今天我们继续来讨论邮件服务器的维护。今天主要来讨论一下邮件服务器的备份与还原。为什么要备份我就不多说了&#xff0c;备份的方法也非常简单&#xff0c;通过备份工具直接备份就可以了。这…

任务管理器在右下角的图标不显示

任务管理器在右下角的图标不显示 2012年11月7日18:22:23 症状如下图所示&#xff0c;不管是打开任务管理器还是最小化它&#xff0c;右下角均没有它的图标。 网上查到的说法均不靠谱。后来我CtrlAltDel调出任务管理器&#xff0c;找到任务管理器对应进程“taskmgr.exe”&#x…

总结 一下UML 类图的关系

1&#xff0c;实线三角 表示 泛化 是一种继承关系,它指定了子类如何特化父类的所有特征和行为 2&#xff0c;虚线三角 表示 实现 是一种类与接口的关系&#xff0c;表示类是接口所有特征和行为的实现 3&#xff0c;空心菱形 表示 聚合 是整体与部分的关系 4&#xff0c; 实心…

MAUI中构建跨平台原生控件实现

简介MAUI中使用Handler体系来处理不同平台的原生控件实现, 即对应的, 如果我们想要创建控件, 只需要创建基于不同平台的Handler即可。那么下面主要教大家如何通过创建Handler(事件处理程序)来构建自己的控件。开始下面, 将通过创建一个进度条控件案例, 来演示如何在MAUI项目中创…

Android之android studio如何获取证书指纹 (SHA1)

android studio如何获取证书指纹 (SHA1) 为什么要用SHA1 我们做百度地图或是高德地图的时候。注册app信息要求填写数字签名 我们可以通过外部命令行获取&#xff0c;也可以通过eclipse获取 &#xff0c;现在主流是android studio下面是通过Android studio获取的方法 第一步&am…

排位重要还是媳妇儿重要?

1 刚打到的车&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼2 还是排位要紧&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼3 大叔为求省事在家自行焚烧床垫▼4 好家伙&#xff0c;这回答直呼&#xff1a;想不到吧&#xff01;&#xff08;素材来源网络&…

新天龙八部服务器维护了吗,《新天龙八部》3月11日全服更新维护公告

亲爱的玩家&#xff0c;大家好&#xff1a;为保证游戏运行的稳定性&#xff0c;提升整体服务质量&#xff0c;《新天龙八部》游戏全部服务器(除测试服务器外)将于2021年3月11日7&#xff1a;00—9&#xff1a;00进行更新维护&#xff0c;维护后版本号升级为3.67.9108。如果在预…

锁屏快捷键_全面屏 iPhone 锁屏快捷键美化,让你的 iPhone 更特别

苹果从iPhone X以后的手机都是全面屏(即刘海屏)&#xff0c;在你的全面屏手机锁屏状态在&#xff0c;屏幕下方有两个快捷按钮&#xff0c;左边的是「手电筒」&#xff0c;右边的是「相机」&#xff0c;在锁屏状态下这两个功能是圆形的&#xff0c;今天堂堂分享一个无需越狱即可…

URLEncode编码和URLDecode解码

1 String text1 java.net.URLEncoder.encode("中国" ,"utf-8" ); 2 String text2 java.net.URLDecoder.decode(text1,"utf-8"); (1).URLEncoder需要注意&#xff1a;这个方法编码了符号&#xff0c;“\” ,“&”,“”,和“&#xff1…

MAUI 移植 Xamarin.Forms 自定义渲染器

简介众所周知, .NET MAUI使用的是Handler处理程序, 而Xamarin使用的则是Render渲染器模式。尽管MAUI中使用了新的渲染模式, 但是仍然Xamarin中的支持Render渲染器, 这意味着如果你的项目是从Xamarin移植到MAUI当中, 大部分代码能够可以重用, 本篇文章介绍如何将Xamarin 渲染器(…

当下流行的分布式文件系统大阅兵

本文对目前数种分布式文件系统进行简单的介绍。当前比较流行的分布式文件系统包括&#xff1a;Lustre、Hadoop、MogileFS、FreeNAS、FastDFS、NFS、OpenAFS、MooseFS、pNFS、以及GoogleFS。Lustre&#xff08;www.lustre.org&#xff09;lustre是一个大规模的、安全可靠的&…

栈和队列之LinekedList(双端队列)

介绍: ( deque,全名double-ended queue)是一种具有队列和栈的性质的数据结构。双端队列中的元素可以从两端弹出,其限定插入和删除操作在表的两端进行。 双端队列是限定插入和删除操作在表的两端进行的线性表。这两端分别称做端点1和端点2(如下图(a)所示)。也可像栈一样,…