获取服务地址

  使用的EurekaClient : getNextServerFromEureka()

   使用的DiscoveryClient: getInstances()

Load Balancer Client  (负载均衡客户端)

  加上@LoadBalaced: 为RestTemplate 或WebClient增加负载均衡的支持。

  Load Balancer Client 的简单使用

  pom文件的引入

  1. /**指定spring-cloud.version**/
  2. <properties>
  3. <java.version>1.8</java.version>
  4. <spring-cloud.version>Greenwich.SR1</spring-cloud.version>
  5. </properties>
  6. /**在注册的时候提供信息*/
  7. <dependency>
  8. <groupId>org.springframework.boot</groupId>
  9. <artifactId>spring-boot-starter-actuator</artifactId>
  10. </dependency>
  11. <dependency>
  12. <groupId>org.springframework.cloud</groupId>
  13. <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
  14. </dependency>
  15.  
  16. /**dependencyManagement 引入springCloud Dependency*/
  17. <dependencies>
  18. <dependency>
  19. <groupId>org.springframework.cloud</groupId>
  20. <artifactId>spring-cloud-dependencies</artifactId>
  21. <version>${spring-cloud.version}</version>
  22. <type>pom</type>
  23. <scope>import</scope>
  24. </dependency>
  25. </dependencies>

bootstarp.properties文件的简单配置

  1. #声明服务名称
  2. spring.application.name=my-customer-service

application.properties声明端口号

  1. #随机端口
  2. server.port=0

显示声明开启DiscoveryClient

  1. Application启动类上添加 @EnableDiscoveryClient注解

定义requestFactory

  1.    @Bean
  2. public HttpComponentsClientHttpRequestFactory requestFactory() {
  3. PoolingHttpClientConnectionManager connectionManager =
  4. new PoolingHttpClientConnectionManager(30, TimeUnit.SECONDS);
  5. connectionManager.setMaxTotal(200);
  6. connectionManager.setDefaultMaxPerRoute(20);
  7.  
  8. CloseableHttpClient httpClient = HttpClients.custom()
  9. .setConnectionManager(connectionManager)
  10. .evictIdleConnections(30, TimeUnit.SECONDS)
  11. .disableAutomaticRetries()
  12. // 有 Keep-Alive 认里面的值,没有的话永久有效
  13. //.setKeepAliveStrategy(DefaultConnectionKeepAliveStrategy.INSTANCE)
  14. // 换成自定义的
  15. .setKeepAliveStrategy(new CustomConnectionKeepAliveStrategy())
  16. .build();
  17.  
  18. HttpComponentsClientHttpRequestFactory requestFactory =
  19. new HttpComponentsClientHttpRequestFactory(httpClient);
  20.  
  21. return requestFactory;
  22. }
  1. CustomConnectionKeepAliveStrategy
  1. public class CustomConnectionKeepAliveStrategy implements ConnectionKeepAliveStrategy {
  2. private final long DEFAULT_SECONDS = 30;
  3.  
  4. @Override
  5. public long getKeepAliveDuration(HttpResponse response, HttpContext context) {
  6. return Arrays.asList(response.getHeaders(HTTP.CONN_KEEP_ALIVE))
  7. .stream()
  8. .filter(h -> StringUtils.equalsIgnoreCase(h.getName(), "timeout")
  9. && StringUtils.isNumeric(h.getValue()))
  10. .findFirst()
  11. .map(h -> NumberUtils.toLong(h.getValue(), DEFAULT_SECONDS))
  12. .orElse(DEFAULT_SECONDS) * 1000;
  13. }
  14. }

注入RestTemplate

  1.   @LoadBalanced
  2. @Bean
  3. public RestTemplate restTemplate(RestTemplateBuilder builder) {
  4. return builder
  5. .setConnectTimeout(Duration.ofMillis(100))
  6. .setReadTimeout(Duration.ofMillis(500))
  7. .requestFactory(this::requestFactory)
  8. .build();
  9. }

RestTemplate的使用

  1.  
  1. @Autowired
  2. private RestTemplate restTemplate;
  3.  
  4. // 请求列表数据
  5. ResponseEntity<List<Info>> list = restTemplate
  6. .exchange("请求的服务地址", HttpMethod.GET, null, ptr);
  7. list.getBody().forEach(c -> log.info("info": {}", c));
  8.  
  9. // 插入数据
  10. MyRequest orderRequest = MyRequest.builder()
  11. .param("value1")
  12. // 集合数据
  13. .param(Arrays.asList("value2"))
  14. .build();
  15.  
  16. RequestEntity<MyRequest> request = RequestEntity
  17. .post(UriComponentsBuilder.fromUriString("服务地址").build().toUri())
  18. .body(orderRequest);
  19.  
  20. ResponseEntity<Order> response = restTemplate.exchange(request, Order.class);
  1.  
  1. Order order = restTemplate
  2. .getForObject("http://waiter-service/order/{id}", Order.class, id);

  

  1.  

Spring Cloud 使用Spring Cloud Loadbalancer访问服务地址的更多相关文章

  1. 使用Spring Session实现Spring Boot水平扩展

    小编说:本文使用Spring Session实现了Spring Boot水平扩展,每个Spring Boot应用与其他水平扩展的Spring Boot一样,都能处理用户请求.如果宕机,Nginx会将请 ...

  2. 【spring boot】spring cloud下spring boot微服务启动没有报错,但是访问访问不到

    spring cloud下spring boot微服务启动没有报错,但是访问访问不到 解决方法: 可能是端口被占用了,但是依旧启用成功了. 更改一下项目启用的端口号,再重新启动查看是否可以正常访问.

  3. 基于Spring Cloud和Netflix OSS 构建微服务-Part 1

    前一篇文章<微服务操作模型>中,我们定义了微服务使用的操作模型.这篇文章中,我们将开始使用Spring Cloud和Netflix OSS实现这一模型,包含核心部分:服务发现(Servic ...

  4. Spring Cloud(二)服务提供者 Eureka + 服务消费者(rest + Ribbon)

    Ribbon是什么? Ribbon是Netflix发布的开源项目,主要功能是提供客户端的软件负载均衡算法,将Netflix的中间层服务连接在一起.Ribbon客户端组件提供一系列完善的配置项如连接超时 ...

  5. 基于Spring Cloud和Netflix OSS构建微服务,Part 2

    在上一篇文章中,我们已使用Spring Cloud和Netflix OSS中的核心组件,如Eureka.Ribbon和Zuul,部分实现了操作模型(operations model),允许单独部署的微 ...

  6. Spring Cloud 入门教程 - 搭建配置中心服务

    简介 Spring Cloud 提供了一个部署微服务的平台,包括了微服务中常见的组件:配置中心服务, API网关,断路器,服务注册与发现,分布式追溯,OAuth2,消费者驱动合约等.我们不必先知道每个 ...

  7. 基于Spring Boot、Spring Cloud、Docker的微服务系统架构实践

    由于最近公司业务需要,需要搭建基于Spring Cloud的微服务系统.遍访各大搜索引擎,发现国内资料少之又少,也难怪,国内Dubbo正统治着天下.但是,一个技术总有它的瓶颈,Dubbo也有它捉襟见肘 ...

  8. maven 聚合工程 用spring boot 搭建 spring cloud 微服务 模块式开发项目

    项目的简单介绍: 项目采用maven聚合工程 用spring boot 搭建 spring cloud的微服务 模块式开发 项目的截图: 搭建开始: 能上图 我少打字 1.首先搭建maven的聚合工程 ...

  9. Spring Cloud(Dalston.SR5)--Zuul 网关-微服务集群

    通过 url 映射的方式来实现 zuul 的转发有局限性,比如每增加一个服务就需要配置一条内容,另外后端的服务如果是动态来提供,就不能采用这种方案来配置了.实际上在实现微服务架构时,服务名与服务实例地 ...

随机推荐

  1. android 完全退出应用程序(经过严格验证)

    今天解决了如何彻底结束Android应用程序的方法.网上有很多的参考方法,什么finish():android.os.Process.killProcess(android.os.Process.my ...

  2. PHP实现上传文件到服务器

    <?php /**************************** *** 功能:上传文件到服务器 ****************************/ session_start() ...

  3. 并行开发 2.plink

    原文:8天玩转并行开发——第二天 Task的使用 在我们了解Task之前,如果我们要使用多核的功能可能就会自己来开线程,然而这种线程模型在.net 4.0之后被一种称为基于 “任务的编程模型”所冲击, ...

  4. ECharts 图表导出

    Echarts图形是由Javascript亲自在前端网页上绘制的 1.用ECharts配置项手册中的toolbox.feature.saveAsImage toolbox: { show: true, ...

  5. 攻防世界--no-strings-attached

    测试文件:https://adworld.xctf.org.cn/media/task/attachments/5d4117b968684b9483d0d4464e0a6fea 这道题要使用到gdb文 ...

  6. [转载]Redux原理(一):Store实现分析

    写在前面 写React也有段时间了,一直也是用Redux管理数据流,最近正好有时间分析下源码,一方面希望对Redux有一些理论上的认识:另一方面也学习下框架编程的思维方式. Redux如何管理stat ...

  7. ASE Alpha Sprint - backend scrum 10

    本次scrum于2019.11.15在sky garden进行,持续30分钟 参与人: Xin Kang, Zhikai Chen, Jia Ning, Hao Wang 请假: Lihao Ran, ...

  8. Sass函数-值列表index

    ndex() 函数类似于索引一样,主要让你找到某个值在列表中所处的位置.在 Sass 中,第一个值就是1,第二个值就是 2,依此类推: >> index(1px solid red, 1p ...

  9. 【leetcode】126. Word Ladder II

    题目如下: 解题思路:DFS或者BFS都行.本题的关键在于减少重复计算.我采用了两种方法:一是用字典dic_ladderlist记录每一个单词可以ladder的单词列表:另外是用dp数组记录从star ...

  10. boost container

    Boost Container provides additional advantages: (1) The interface of the containers resemble those o ...