resttemplate

springCloud学习-服务消费者(rest+ribbon)

非 Y 不嫁゛ 提交于 2020-01-01 02:23:46
1、ribbon简介     spring cloud的Netflix中提供了两个组件实现软负载均衡调用:ribbon和feign。 Ribbon 是一个基于 HTTP 和 TCP 客户端的负载均衡器 它可以在客户端配置 ribbonServerList(服务端列表),然后轮询请求以实现均衡负载 它在联合 Eureka 使用时 ribbonServerList 会被 DiscoveryEnabledNIWSServerList 重写,扩展成从 Eureka 注册中心获取服务端列表 同时它也会用 NIWSDiscoveryPing 来取代 IPing,它将职责委托给 Eureka 来确定服务端是否已经启动 2、启动多个client实例    停止eureka-client服务,打开Run/Debug Configurations 把图中勾选取消,然后保存,启动,此时启动端口为8762,打开配置文件,将端口修改为8763,再次启动,可以看到在注册中心启动了两个服务 3、创建服务消费者service-ribbon <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema

SpringCloud之Ribbon

Deadly 提交于 2020-01-01 02:11:33
【 前面的话 】书接上文,本文的某些知识依赖我的上一篇文章: SpringCloud之Eureka ,如果没有看过可以先移步去看一下。另外在微服务架构中,业务都会被拆分成一个个独立的服务,服务与服务的通讯是基于http restful的。Spring cloud有两种服务调用方式,一种是ribbon+restTemplate,另一种是feign。在这一篇文章首先讲解下基于ribbon+rest。 壹、Ribbon简介 ribbon是一个负载均衡客户端,可以很好的控制htt和tcp的一些行为。Feign默认集成了ribbon。 ribbon 已经默认实现了这些配置bean: IClientConfig ribbonClientConfig: DefaultClientConfigImpl IRule ribbonRule: ZoneAvoidanceRule IPing ribbonPing: NoOpPing ServerList ribbonServerList: ConfigurationBasedServerList ServerListFilter ribbonServerListFilter: ZonePreferenceServerListFilter ILoadBalancer ribbonLoadBalancer: ZoneAwareLoadBalancer 贰

springcloud费话之断路器(hystrix in feign)

我是研究僧i 提交于 2020-01-01 01:57:45
目录: springcloud费话之Eureka基础 springcloud费话之Eureka集群 springcloud费话之Eureka服务访问(restTemplate) springcloud费话之Eureka接口调用(feign) springcloud费话之断路器(hystrix in feign) springcloud费话之配置中心基础(SVN) springcloud费话之配置中心客户端(SVN) 使用eureka服务发现实现服务器之间的http访问(feign)并添加断路器hystrix 断路器,是springcloud中的一种熔断机制的实现方式 熔断机制,是达到了某个异常以后,后续判断不进行,直接否定的一种方式,类似于&&或者||的熔断的感觉 因为服务器之间的调用,判断错误链,以及出现问题以后的回调,时间可能会很长,如果不尽快阻止, 很可能导致很多请求都等待几十秒的超时而造成服务器阻塞,进而造成服务器崩溃 因此熔断机制十分重要 在springcloud的熔断机制,叫做Spring Cloud Circuit Breaker 具体使用的是hystrix断路器 具体使用方式和流程如下 1.依赖 在springcloud官方网站中找到断路器()的依赖,如下图,并导入pom 2.在启动类添加注解 在启动类添加注解@EnableHystrix,添加后代码如下:

Retry java RestTemplate HTTP request if host offline

谁都会走 提交于 2020-01-01 01:48:38
问题 Hi I'm using the spring RestTemplate for calling a REST API. The API can be very slow or even offline. My application is building the cache by sending thousands of requests one after the other. The responses can be very slow too, because they contains a lot of data. I have already increased the Timeout to 120 seconds. My problem now it that the API can be offline and I get a org.apache.http.conn.ConnectionPoolTimeoutException: Timeout waiting for connection from pool exception. In the case

RestTemplate较为通用的使用方法

回眸只為那壹抹淺笑 提交于 2019-12-31 17:34:14
RestTemplate较为通用的使用方法 一丶http请求响应   1. http请求主要包括3个部分, 请求行(get,post等请求方法 url地址 http协议版本), 请求头( key value形式), 请求体(任意文本, 通常与请求头content-type对应).      2. http响应主要包括3个部分, 响应消息行(协议/版本 响应状态码 对响应状态码的描述), 响应消息头(key value形式), 响应消息正文(任意文本, 通常与响应消息头content-type对应)      更详细的请看 此博文 二丶restTemplate使用简述   处理http请求, 主要是构造生成http请求报文, 处理转换http响应报文.   在实际项目中, 主要是使用get, post两种请求.   1) get请求, 主要是在请求行中的url带上请求参数, 如http://localhost:8080/server/userId?userId=2 中的userId=2, url路径中的部分数据也可以作为请求参数, 如http://localhost:8080/server/userId/2中的2, 可以和前一个url等同   restTemplate主要是通过占位符{}来构造url,   #getForObject(url, responseType,

02 服务调用方式

主宰稳场 提交于 2019-12-31 12:54:22
02 服务调用方式 1. RPC和HTTP 无论是微服务还是SOA,都面临着服务间的远程调用。那么服务间的远程调用方式有哪些呢? 常见的远程调用方式有以下2种: RPC :Remote Produce Call远程过程调用, RPC基于Socket ,工作在会话层。自定义数据格式,速度快,效 率高。早期的webservice,现在热门的dubbo,都是RPC的典型代表 Http :http其实是 一种网络传输协议,基于TCP ,工作在应用层,规定了数据传输的格式。现在客户端浏览器 与服务端通信基本都是采用Http协议,也可以用来进行远程服务调用。缺点是消息封装臃肿,优势是对服务的 提供和调用方没有任何技术限定,自由灵活,更符合微服务理念 现在热门的Rest风格,就可以通过http协议来实现。 区别 :RPC的机制是根据语言的API(language API)来定义的,而不是根据基于网络的应用来定义的。如果你们公司全部采用Java技术栈,那么使用Dubbo作为微服务架构是一个不错的选择。 相反,如果公司的技术栈多样化,而且你更青睐Spring家族,那么Spring Cloud搭建微服务是不二之选。在我们的项 目中,会选择Spring Cloud套件,因此会使用Http方式来实现服务间调用 2.Http客户端工具 既然微服务选择了Http,那么我们就需要考虑自己来实现对请求和响应的处理

Serializing a field as json

扶醉桌前 提交于 2019-12-31 02:19:19
问题 I need to send a JSON body to REST service. Unfortunately, service is quite old and I need to send a POJO, containing JSON string field. So it looks like this: class SomeData { int id; SomePojo jsonField; ... } So SomeData should be sent like this: {'id': 1, 'jsonField': some_json_string} I haven't found any Jackson magic annotation to make it works and I've got a doubt it can be made somehow because of type erasure in Java and it may not be possible to write custom serializer for this

RESTful的理解

感情迁移 提交于 2019-12-30 22:07:08
REST(Representational State Transfer ),有中文翻译为"具象状态传输"(也有:"代表性状态传输")。是由 Roy Thomas Fielding博士 在2000年就读加州大学欧文分校期间在学术论文中提出的一个术语。他首次系统全面地阐述了REST的架构风格和设计思想。这篇论文是Web发展史上一篇非常重要的技术文献,他也为WEB架构的设计与评判奠定了理论基础。 中文版论文下载地址: http://ishare.iask.sina.com.cn/f/20790836.html REST 定义了一组体系架构原则,您可以根据这些,包括使用不同语言编写的客户端如何通过 HTTP 处理和传输资源状态。所以在事实上,REST 对 Web的影响非常大,由于其使用相当方便,已经普遍地取代了基于 SOAP 和 WSDL 的接口设计。在多年以后的今天,REST的主要框架已经开始雨后春笋般的出现。 个人理解: (一) 首先REST只是一种风格,不是一种标准 (二) REST是以资源为中心的 (三) REST充分利用或者说极端依赖HTTP协议 一.对于今天正在吸引如此多注意力的最纯粹形式的 REST Web 服务,其具体实现应该遵循以下基本设计原则: 1.1.显式地使用不同的 HTTP 请求方法 1.2.无状态 1.3.公开目录结构式的 URI(通过逻辑URI定位资源)。

Make Http call using ReactiveX for Java

若如初见. 提交于 2019-12-30 06:16:08
问题 I am new to ReactiveX for Java and I've the following code block that make external http call but it is not async. We are using rxjava 1.2, and Java 1.8 private ResponseEntity<String> callExternalUrl(String url, String json, HttpMethod method) { RestTemplate restTemplate; HttpEntity request; request = new HttpEntity(jsonContent, httpHeaders); return restTemplate.exchange(url, httpMethod, request, String.class); } I've the following code block I found online but I couldn't totally understand

SpringCloud_远程调用Feign

大城市里の小女人 提交于 2019-12-30 00:45:28
在前面的学习中,我们使用了Ribbon的负载均衡功能,大大简化了远程调用时的代码: String user = this.restTemplate.getForObject("http://service-provider/user/" + id, String.class); 如果就学到这里,你可能以后需要编写类似的大量重复代码,格式基本相同,无非参数不一样。有没有更优雅的方式,来对这些代码再次优化呢? 这就是我们接下来要学的Feign的功能了。 2.1.简介 有道词典的英文解释: 为什么叫伪装? Feign可以把Rest的请求进行隐藏,伪装成类似SpringMVC的Controller一样。你不用再自己拼接url,拼接参数等等操作,一切都交给Feign去做。 项目主页: https://github.com/OpenFeign/feign 2.2.快速入门 改造itcast-service-consumer工程 2.2.1.导入依赖 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId></dependency> 2.2.2.开启Feign功能 我们在启动类上, 添加注解 ,开启Feign功能