Spring Cloud 使用Spring Cloud Loadbalancer访问服务地址
获取服务地址
使用的EurekaClient : getNextServerFromEureka()
使用的DiscoveryClient: getInstances()
Load Balancer Client (负载均衡客户端)
加上@LoadBalaced: 为RestTemplate 或WebClient增加负载均衡的支持。
Load Balancer Client 的简单使用
pom文件的引入
- /**指定spring-cloud.version**/
- <properties>
- <java.version>1.8</java.version>
- <spring-cloud.version>Greenwich.SR1</spring-cloud.version>
- </properties>
- /**在注册的时候提供信息*/
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-actuator</artifactId>
- </dependency>
- <dependency>
- <groupId>org.springframework.cloud</groupId>
- <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
- </dependency>
- /**dependencyManagement 引入springCloud Dependency*/
- <dependencies>
- <dependency>
- <groupId>org.springframework.cloud</groupId>
- <artifactId>spring-cloud-dependencies</artifactId>
- <version>${spring-cloud.version}</version>
- <type>pom</type>
- <scope>import</scope>
- </dependency>
- </dependencies>
bootstarp.properties文件的简单配置
- #声明服务名称
- spring.application.name=my-customer-service
application.properties声明端口号
- #随机端口
- server.port=0
显示声明开启DiscoveryClient
- 在Application启动类上添加 ,@EnableDiscoveryClient注解
定义requestFactory
- @Bean
- public HttpComponentsClientHttpRequestFactory requestFactory() {
- PoolingHttpClientConnectionManager connectionManager =
- new PoolingHttpClientConnectionManager(30, TimeUnit.SECONDS);
- connectionManager.setMaxTotal(200);
- connectionManager.setDefaultMaxPerRoute(20);
- CloseableHttpClient httpClient = HttpClients.custom()
- .setConnectionManager(connectionManager)
- .evictIdleConnections(30, TimeUnit.SECONDS)
- .disableAutomaticRetries()
- // 有 Keep-Alive 认里面的值,没有的话永久有效
- //.setKeepAliveStrategy(DefaultConnectionKeepAliveStrategy.INSTANCE)
- // 换成自定义的
- .setKeepAliveStrategy(new CustomConnectionKeepAliveStrategy())
- .build();
- HttpComponentsClientHttpRequestFactory requestFactory =
- new HttpComponentsClientHttpRequestFactory(httpClient);
- return requestFactory;
- }
- CustomConnectionKeepAliveStrategy
- public class CustomConnectionKeepAliveStrategy implements ConnectionKeepAliveStrategy {
- private final long DEFAULT_SECONDS = 30;
- @Override
- public long getKeepAliveDuration(HttpResponse response, HttpContext context) {
- return Arrays.asList(response.getHeaders(HTTP.CONN_KEEP_ALIVE))
- .stream()
- .filter(h -> StringUtils.equalsIgnoreCase(h.getName(), "timeout")
- && StringUtils.isNumeric(h.getValue()))
- .findFirst()
- .map(h -> NumberUtils.toLong(h.getValue(), DEFAULT_SECONDS))
- .orElse(DEFAULT_SECONDS) * 1000;
- }
- }
注入RestTemplate
- @LoadBalanced
- @Bean
- public RestTemplate restTemplate(RestTemplateBuilder builder) {
- return builder
- .setConnectTimeout(Duration.ofMillis(100))
- .setReadTimeout(Duration.ofMillis(500))
- .requestFactory(this::requestFactory)
- .build();
- }
RestTemplate的使用
- @Autowired
- private RestTemplate restTemplate;
- // 请求列表数据
- ResponseEntity<List<Info>> list = restTemplate
- .exchange("请求的服务地址", HttpMethod.GET, null, ptr);
- list.getBody().forEach(c -> log.info("info": {}", c));
- // 插入数据
- MyRequest orderRequest = MyRequest.builder()
- .param("value1")
- // 集合数据
- .param(Arrays.asList("value2"))
- .build();
- RequestEntity<MyRequest> request = RequestEntity
- .post(UriComponentsBuilder.fromUriString("服务地址").build().toUri())
- .body(orderRequest);
- ResponseEntity<Order> response = restTemplate.exchange(request, Order.class);
- Order order = restTemplate
- .getForObject("http://waiter-service/order/{id}", Order.class, id);
Spring Cloud 使用Spring Cloud Loadbalancer访问服务地址的更多相关文章
- 使用Spring Session实现Spring Boot水平扩展
小编说:本文使用Spring Session实现了Spring Boot水平扩展,每个Spring Boot应用与其他水平扩展的Spring Boot一样,都能处理用户请求.如果宕机,Nginx会将请 ...
- 【spring boot】spring cloud下spring boot微服务启动没有报错,但是访问访问不到
spring cloud下spring boot微服务启动没有报错,但是访问访问不到 解决方法: 可能是端口被占用了,但是依旧启用成功了. 更改一下项目启用的端口号,再重新启动查看是否可以正常访问.
- 基于Spring Cloud和Netflix OSS 构建微服务-Part 1
前一篇文章<微服务操作模型>中,我们定义了微服务使用的操作模型.这篇文章中,我们将开始使用Spring Cloud和Netflix OSS实现这一模型,包含核心部分:服务发现(Servic ...
- Spring Cloud(二)服务提供者 Eureka + 服务消费者(rest + Ribbon)
Ribbon是什么? Ribbon是Netflix发布的开源项目,主要功能是提供客户端的软件负载均衡算法,将Netflix的中间层服务连接在一起.Ribbon客户端组件提供一系列完善的配置项如连接超时 ...
- 基于Spring Cloud和Netflix OSS构建微服务,Part 2
在上一篇文章中,我们已使用Spring Cloud和Netflix OSS中的核心组件,如Eureka.Ribbon和Zuul,部分实现了操作模型(operations model),允许单独部署的微 ...
- Spring Cloud 入门教程 - 搭建配置中心服务
简介 Spring Cloud 提供了一个部署微服务的平台,包括了微服务中常见的组件:配置中心服务, API网关,断路器,服务注册与发现,分布式追溯,OAuth2,消费者驱动合约等.我们不必先知道每个 ...
- 基于Spring Boot、Spring Cloud、Docker的微服务系统架构实践
由于最近公司业务需要,需要搭建基于Spring Cloud的微服务系统.遍访各大搜索引擎,发现国内资料少之又少,也难怪,国内Dubbo正统治着天下.但是,一个技术总有它的瓶颈,Dubbo也有它捉襟见肘 ...
- maven 聚合工程 用spring boot 搭建 spring cloud 微服务 模块式开发项目
项目的简单介绍: 项目采用maven聚合工程 用spring boot 搭建 spring cloud的微服务 模块式开发 项目的截图: 搭建开始: 能上图 我少打字 1.首先搭建maven的聚合工程 ...
- Spring Cloud(Dalston.SR5)--Zuul 网关-微服务集群
通过 url 映射的方式来实现 zuul 的转发有局限性,比如每增加一个服务就需要配置一条内容,另外后端的服务如果是动态来提供,就不能采用这种方案来配置了.实际上在实现微服务架构时,服务名与服务实例地 ...
随机推荐
- android 完全退出应用程序(经过严格验证)
今天解决了如何彻底结束Android应用程序的方法.网上有很多的参考方法,什么finish():android.os.Process.killProcess(android.os.Process.my ...
- PHP实现上传文件到服务器
<?php /**************************** *** 功能:上传文件到服务器 ****************************/ session_start() ...
- 并行开发 2.plink
原文:8天玩转并行开发——第二天 Task的使用 在我们了解Task之前,如果我们要使用多核的功能可能就会自己来开线程,然而这种线程模型在.net 4.0之后被一种称为基于 “任务的编程模型”所冲击, ...
- ECharts 图表导出
Echarts图形是由Javascript亲自在前端网页上绘制的 1.用ECharts配置项手册中的toolbox.feature.saveAsImage toolbox: { show: true, ...
- 攻防世界--no-strings-attached
测试文件:https://adworld.xctf.org.cn/media/task/attachments/5d4117b968684b9483d0d4464e0a6fea 这道题要使用到gdb文 ...
- [转载]Redux原理(一):Store实现分析
写在前面 写React也有段时间了,一直也是用Redux管理数据流,最近正好有时间分析下源码,一方面希望对Redux有一些理论上的认识:另一方面也学习下框架编程的思维方式. Redux如何管理stat ...
- ASE Alpha Sprint - backend scrum 10
本次scrum于2019.11.15在sky garden进行,持续30分钟 参与人: Xin Kang, Zhikai Chen, Jia Ning, Hao Wang 请假: Lihao Ran, ...
- Sass函数-值列表index
ndex() 函数类似于索引一样,主要让你找到某个值在列表中所处的位置.在 Sass 中,第一个值就是1,第二个值就是 2,依此类推: >> index(1px solid red, 1p ...
- 【leetcode】126. Word Ladder II
题目如下: 解题思路:DFS或者BFS都行.本题的关键在于减少重复计算.我采用了两种方法:一是用字典dic_ladderlist记录每一个单词可以ladder的单词列表:另外是用dp数组记录从star ...
- boost container
Boost Container provides additional advantages: (1) The interface of the containers resemble those o ...