使用Spring Cloud休息客户电话

使用Spring-Cloud项目进行REST客户端调用有几种有趣的方法。 Spring-Cloud REST支持建立在核心Netflix OSS库的基础上,但将它们抽象化并在此过程中简化了库的使用。

RestTemplate

首先,让我们考虑使用RestTemplate通过基于Spring的应用程序进行Rest调用的传统方法:

public class RestTemplateIntegrationTest {@Autowiredprivate RestTemplate restTemplate;@Testpublic void testCallPongService() {ResponseEntity<MessageAcknowledgement> ack =restTemplate.exchange("http://servicehost/message",HttpMethod.POST,new HttpEntity<>(new Message("test", "hello")),MessageAcknowledgement.class,Collections.emptyMap());assertThat(ack.getBody().getPayload(), equalTo("Pong From Configuration Server"));}
}

在此特定实例中,预期客户端将完全知道url的主机部分,RestTemplate将负责将Java对象编组为适当的媒体类型,进行REST调用,并将响应编组回Java对象。 。

带功能区和尤里卡的RestTemplate

Netflix Ribbon提供了一个用于进行基于REST的调用的库,而使用RestTemplate可以使客户端完全了解该主机,而使用Ribbon则通常可以通过集中式Netflix Eureka服务器来解析该主机,并且Ribbon可以在以下情况下实现负载均衡找到一个服务的多个主机。 如果在类路径中存在Spring-cloud库和Ribbon相关的库,则Spring-Cloud将RestTemplate增强为基于Ribbon,而不需要其他配置,而Spring-Cloud的调用完全像以前一样,但有一些变化。

ResponseEntity<MessageAcknowledgement> ack =restTemplate.exchange("http://sample-pong/message",HttpMethod.POST,new HttpEntity<>(new Message("test", "hello")),MessageAcknowledgement.class,Collections.emptyMap());

所不同的是,在这种情况下,主机名是“ sample-pong”,不是真正的主机名,而是试图在Eureka中查找以该名称作为注册名称的服务器列表。结果主机/端口用于发出请求。

如果需要自定义,则可以为命名客户端提供为命名客户端指定的Ribbon功能区特定属性,方法如下:

ResponseEntity<MessageAcknowledgement> ack =restTemplate.exchange("http://samplepong/message",HttpMethod.POST,new HttpEntity<>(new Message("test", "hello")),MessageAcknowledgement.class,Collections.emptyMap());

上面命名的客户端为“ samplepong”,此客户端的功能区特定属性如下:

samplepong:ribbon:DeploymentContextBasedVipAddresses: sample-pongNIWSServerListClassName: com.netflix.niws.loadbalancer.DiscoveryEnabledNIWSServerListReadTimeout: 5000MaxAutoRetries: 2
  • 如果您对功能区的更多低级配置感兴趣, 请参阅此处

Ribbon是进行REST调用的一种相当复杂的底层方法,RestTemplate抽象化Ribbon的实现并使其从客户端的角度看起来很容易。

Netflix Feign

Netflix Feign是对基于REST的服务进行调用的另一种简化方法,它所需要的只是一个带有相关注释的接口,最好通过一个示例进行演示:

import org.bk.consumer.domain.Message;
import org.bk.consumer.domain.MessageAcknowledgement;
import org.springframework.cloud.netflix.feign.FeignClient;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;@FeignClient("samplepong")
public interface PongClient {@RequestMapping(method = RequestMethod.POST, value = "/message",produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE)MessageAcknowledgement sendMessage(@RequestBody Message message);
}

尽管注释是特定于Spring的,但Spring-Cloud通过添加支持Spring MVC注释的编码器和解码器来简化此操作。

接口上的@FeignClient批注将其标识为FeignClient代码。 在Spring Configuration中需要@EnableFeignClients来加载所有这样的FeignClient。

@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients
public class PingApplication {public static void main(String[] args) {SpringApplication.run(PingApplication.class, args);}
}

资源资源

  • Spring Cloud文档
  • Josh Long的博客,关于使用Spring Cloud和Netflix的Eureka进行微服务注册和发现

翻译自: https://www.javacodegeeks.com/2015/09/rest-client-calls-with-spring-cloud.html

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

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

相关文章

查看目标主机安装的杀毒软件

命令&#xff1a; wmic /namespace:\\root\securitycenter2 path antivirusproduct GET displayName,productState, pathToSignedProductExe 参考链接&#xff1a;https://stackoverflow.com/questions/42472336/is-there-a-command-to-check-if-there-was-any-antivirus-insta…

Netty系列之Netty百万级推送服务设计要点

原文&#xff1a;http://www.infoq.com/cn/articles/netty-million-level-push-service-design-points 1. 背景 1.1. 话题来源 最近很多从事移动互联网和物联网开发的同学给我发邮件或者微博私信我&#xff0c;咨询推送服务相关的问题。问题五花八门&#xff0c;在帮助大家答疑…

上架APPStore需要准备哪些材料?

前端时间用敏捷式开发平台开发了一款APP应用&#xff0c;应用名称我就不说啦&#xff0c;这篇文章主要讲述一下上架苹果应用商店APPStore需要准备哪些材料&#xff0c;有相关的困扰欢迎私信我。一、上架流程1. 注册苹果企业账号2. 创建测试证书&#xff0c;发布证书 (使用Mac)3…

浅谈C++设计模式之工厂方法(Factory Method)

为什么要用设计模式&#xff1f;根本原因是为了代码复用&#xff0c;增加可维护性。 面向对象设计坚持的原则&#xff1a;开闭原则&#xff08;Open Closed Principle&#xff0c;OCP&#xff09;、里氏代换原则&#xff08;Liskov Substitution Principle&#xff0c;LSP&…

上架Android应用到腾讯应用包、百度手机助手、华为应用市场、小米应用商店、阿里应用分发平台需要准备哪些材料?...

前端时间用敏捷式开发平台开发了一款APP应用&#xff0c;应用名称我就不说啦&#xff0c;这篇文章主要讲述一下上架各大安卓应用商店&#xff08;腾讯应用宝、阿里应用商店、百度手机助手、华为应用市场、小米应用商店&#xff09;需要准备哪些材料&#xff0c;有相关的困扰欢迎…

java并发队列_Java并发教程–阻塞队列

java并发队列如第3部分所述&#xff0c;Java 1.5中引入的线程池提供了核心支持&#xff0c;该支持很快成为许多Java开发人员的最爱。 在内部&#xff0c;这些实现巧妙地利用了Java 1.5中引入的另一种并发功能-阻塞队列。 队列 首先&#xff0c;简要回顾一下什么是标准队列。 …

BBScan:信息泄漏批量扫描脚本

有些朋友手上有几十万甚至上百万个域名&#xff0c;如果把这些域名全部扔给wvs、 APPscan这样的重型扫描器&#xff0c;显然是不太合适的。 对于一个拥有上万IP的企业&#xff0c;又如何快速定位可能存在弱点的机器呢&#xff1f; 试试信息泄漏批量扫描脚本 BBScan。 BBScan是一…

【APICloud系列|18】上架Android应用到腾讯应用包、百度手机助手、华为应用市场、小米应用商店、阿里应用分发平台需要准备哪些材料?

前端时间用敏捷式开发平台开发了一款APP应用,应用名称我就不说啦,这篇文章主要讲述一下上架各大安卓应用商店(腾讯应用宝、阿里应用商店、百度手机助手、华为应用市场、小米应用商店)需要准备哪些材料,有相关的困扰欢迎私信我。 一、应用商店选择 推荐平台(六选五) 1.…

Activiti 6中的可插拔持久性

在过去的几年中&#xff0c;我们经常听到&#xff08;来自社区和我们的客户&#xff09;关于如何将Activiti的持久性逻辑从关系数据库交换到其他内容的请求。 当我们宣布Activiti 6时&#xff0c; 我们做出的承诺之一就是我们将实现这一目标。 深入研究Activiti引擎代码的人会…

src漏洞类型总结

本文转载于https://blog.csdn.net/qq_33942040/article/details/111831536 这三类存在漏洞可能更大 越他娘丑的站&#xff0c;越有可能存在洞。 Asp aspx 存在漏洞的可能更大 登陆口没得验证码的可能存在一,未授权访问 常见28种服务器或者中间协议未授权访问 易出现处 ①照片…

[LeetCode][JavaScript]Roman to Integer

Roman to Integer Given a roman numeral, convert it to an integer. Input is guaranteed to be within the range from 1 to 3999. https://leetcode.com/problems/roman-to-integer/ 罗马数字转阿拉伯数字。 从后往前扫&#xff0c;如果当前的数大于之前的数&#xff0c;加…

【APICloud系列|19】上架APPStore需要准备哪些材料?

前端时间用敏捷式开发平台开发了一款APP应用,应用名称我就不说啦,这篇文章主要讲述一下上架苹果应用商店APPStore需要准备哪些材料,有相关的困扰欢迎私信我。 一、上架流程 1. 注册苹果企业账号 2. 创建测试证书,发布证书 (使用Mac) 3. 使用xcode 上传应用到APP Store (…

Json注入

一、Json简介 JSON 是存储和交换文本信息的语法&#xff0c;是轻量级的文本数据交换格式。类似xml&#xff0c;但JSON 比 XML 更小、更快&#xff0c;更易解析。所以现在接口数据传输都采用json方式进行。JSON 文本的 MIME 类型是 “application/json”。 json语法 数据在名…

国行 lg g3 D858 刷 lg g3 D858hk 教程(备忘)

纯手打&#xff0c;转载请注明出处~ 刷机有风险&#xff0c;出现问题概不负责&#xff01; 本着自娱自乐的宗旨 &#xff0c;分享一下&#xff0c;出了问题不负责&#xff01; 准备的材料&#xff1a; 1&#xff0c;手机一枚&#xff08;废话&#xff09;国行lg g3 d858 2&am…

七夕(情人节)表白女朋友,程序员应该如何装一波13

很多小伙伴私信说程序员应该怎么表白女朋友,大神支个招,直接上代码。最近的.vbs或者.vbe表白真的很火,小伙伴们赶紧动起来。(废话少说,赶紧往下看) 代码一: msgbox("做我女粉丝好吗?")msgbox("房产证上写你名字")msgbox("孙叫兽")msgb…

渗透测试-验证码的爆破与绕过

【验证码机制原理】 客户端发起请求->服务端响应并创建一个新的SessionID同时生成随机验证码&#xff0c;将验证码和SessionID一并返回给客户端->客户端提交验证码连同SessionID给服务端->服务端验证验证码同时销毁当前会话&#xff0c;返回给客户端结果。 【客户端可…

java并发调用_Java并发教程–可调用,将来

java并发调用从Java的第一个发行版开始&#xff0c;Java的美丽之处之一就是我们可以轻松编写多线程程序并将异步处理引入我们的设计中。 Thread类和Runnable接口与Java的内存管理模型结合在一起&#xff0c;意味着可以直接进行线程编程。 但是&#xff0c;如第3部分所述&#x…

最近对项目代码做的一些更改和感想

最近对项目代码做了一些更改&#xff0c;主要的改动是对整个界面框架的改变&#xff0c;因为以前写代码的时候&#xff0c;为了完成功能&#xff0c;没有从上帝视角来思考软件的界面设计&#xff0c;完全是需要这个功能了&#xff0c;怎么可以做到&#xff1f;好&#xff0c;就…

CSS常见的四种垂直居中的方法

面试中不管是笔试题还是面试题,一般很容易被问到如何实现垂直水平居中,这里总结四种方法作为参考 (1)margin:auto法 css: div{ width: 400px; height: 400px; position: relative; border: 1px solid #465468; } img{ position: absolute; margin: auto; top: 0; left: 0; …

Linux下切换Python2和Python3的4种方法

本篇博文面向Linux用户&#xff0c;在Linux下(Ubuntu)下测试通过&#xff0c;Win用户嘛&#xff0c;…… 0x00 为什么需要有两个版本的Python Python2和Python3不兼容是每个接触过Python的开发者都知道的事&#xff0c;虽说Python3是未来&#xff0c;但是仍然有很多项目采用P…