使用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
使用Spring Cloud休息客户电话相关推荐
- Spring Cloud 中文文档
Spring Cloud 官方文档 Spring Cloud为开发人员提供了用于快速构建分布式系统中某些常见模式的工具(例如,配置管理,服务发现,断路器,智能路由,微代理,控制总线).分布式系统的协调 ...
- Spring Cloud微服务系统架构的一些简单介绍和使用
Spring Cloud 目录 特征 云原生应用程序 Spring Cloud上下文:应用程序上下文服务 引导应用程序上下文 应用程序上下文层次结构 改变Bootstrap的位置Properties ...
- 带有Netflix Ribbon的Spring Cloud Rest Client-基础知识
在较早的博客文章中,我介绍了Spring Cloud世界中REST客户端的各种选项. 所有选项围绕着基于Netflix OSS的名为Ribbon的组件,该组件处理与承载服务的不同实例之间的调用负载平衡 ...
- [转]Spring Cloud在国内中小型公司能用起来吗?
原文地址:http://www.cnblogs.com/ityouknow/p/7508306.html 原文地址:https://www.zhihu.com/question/61403505 今天 ...
- Spring Cloud 系列之 Alibaba Nacos 注册中心(一)
前言 从本章节开始,我们学习 Spring Cloud Alibaba 相关微服务组件. Spring Cloud Alibaba 介绍 Spring Cloud Alibaba 致力于提供微服务开发 ...
- Spring Cloud Alibaba系列使用(二)----Nacos注册中心
1|1Spring Cloud Alibaba 介绍 Spring Cloud Alibaba 致力于提供微服务开发的一站式解决方案.此项目包含开发分布式应用微服务的必需组件,方便开发者通过 Spri ...
- Spring Cloud Dalston.RELEASE中文文档
Spring Cloud Dalston.RELEASE中文文档 Spring Cloud 目录 特性 云原生应用程序 Spring Cloud上下文:应用程序上下文服务 引导应用程序上下文 应用程序 ...
- Spring Cloud(十一)高可用的分布式配置中心 Spring Cloud Bus 消息总线集成(RabbitMQ)
上一篇文章,留了一个悬念,Config Client 实现配置的实时更新,我们可以使用 /refresh 接口触发,如果所有客户端的配置的更改,都需要手动触发客户端 /refresh ,当服务越来越多 ...
- spring cloud连载第二篇之Spring Cloud Config
Spring Cloud Config Spring Cloud Config为分布式服务提供了服务侧和客户侧的外部配置支持.通过Spring Cloud Config你可以有一个统一的地方来管理所有 ...
最新文章
- 1.5 Kali Linux策略
- Swift实现Touch ID验证
- mac OS下显示.htaccess等隐藏文件
- ASP.NET MVC 3.0学习系列文章—Model in ASP.NET MVC 3.0
- win10 安装xilinx 14.7 之后打开new project 奔溃解决方法
- python中index函数_python中index函数的用法
- 9行代码满分 【C语言】 L1-062 幸运彩票 (15分)
- 静态资源部署到服务器不能访问
- 程序员利用测试账户套现千万美元,或面临20年监禁
- 信息学奥赛一本通C++语言——1078:求分数序列和
- AJPFX关于JDK,JRE,JVM的区别与联系
- SqlHelper帮助类_上(SQLServer数据库含Connection详解)
- c语言计算器程序设计,c语言计算器代码程序设计报告.docx
- 在HTML页面添加数学公式格式
- 遭遇nat.exe,socks.exe,USP10.dll,BOSC.dll,kb080387.CNT,~ctwxw.txt等1
- 网易公开课 mysql_“网易云课程”SQL分析
- vnc远程控制软件配置,vnc远程控制软件怎么配置的,教程详解
- 音乐相册源码php,分享使用JavaScript制作微信音乐相册实例
- 华为MA5600配置radius认证登陆
- excel 操作技巧