Spring Cloud构建微服务架构:服务消费(基础)
使用LoadBalancerClient
在Spring Cloud Commons中提供了大量的与服务治理相关的抽象接口,包括DiscoveryClient
、这里我们即将介绍的LoadBalancerClient
等。对于这些接口的定义我们在上一篇介绍服务注册与发现时已经说过,Spring Cloud做这一层抽象,很好的解耦了服务治理体系,使得我们可以轻易的替换不同的服务治理设施。
从LoadBalancerClient
接口的命名中,我们就知道这是一个负载均衡客户端的抽象定义,下面我们就看看如何使用Spring Cloud提供的负载均衡器客户端接口来实现服务的消费。
下面的例子,我们将利用上一篇中构建的eureka-server作为服务注册中心、eureka-client作为服务提供者作为基础。
- 我们先来创建一个服务消费者工程,命名为:
eureka-consumer
。并在pom.xml
中引入依赖(这里省略了parent和dependencyManagement的配置): <dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-eureka</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency> </dependencies>
- 配置
application.properties
,指定eureka注册中心的地址: spring.application.name=eureka-consumer server.port=2101eureka.client.serviceUrl.defaultZone=http://localhost:1001/eureka/
- 创建应用主类。初始化
RestTemplate
,用来真正发起REST请求。@EnableDiscoveryClient
注解用来将当前应用加入到服务治理体系中。 @EnableDiscoveryClient @SpringBootApplication public class Application {@Beanpublic RestTemplate restTemplate() {return new RestTemplate();}public static void main(String[] args) {new SpringApplicationBuilder(Application.class).web(true).run(args);} }
- 创建一个接口用来消费eureka-client提供的接口:
@RestController public class DcController {@AutowiredLoadBalancerClient loadBalancerClient;@AutowiredRestTemplate restTemplate;@GetMapping("/consumer")public String dc() {ServiceInstance serviceInstance = loadBalancerClient.choose("eureka-client");String url = "http://" + serviceInstance.getHost() + ":" + serviceInstance.getPort() + "/dc";System.out.println(url);return restTemplate.getForObject(url, String.class);} }
可以看到这里,我们注入了
LoadBalancerClient
和RestTemplate
,并在/consumer
接口的实现中,先通过loadBalancerClient
的choose
函数来负载均衡的选出一个eureka-client
的服务实例,这个服务实例的基本信息存储在ServiceInstance
中,然后通过这些对象中的信息拼接出访问/dc
接口的详细地址,最后再利用RestTemplate
对象实现对服务提供者接口的调用。在完成了上面你的代码编写之后,读者可以将eureka-server、eureka-client、eureka-consumer都启动起来,然后访问http://localhost:2101/consumer ,来跟踪观察eureka-consumer服务是如何消费eureka-client服务的
/dc
接口的。Spring Cloud大型企业分布式微服务云架构源码请加企鹅求求:一七九一七四三三八零
- 创建应用主类。初始化
- 配置
转载于:https://www.cnblogs.com/sunnysunny/p/10528280.html
Spring Cloud构建微服务架构:服务消费(基础)相关推荐
- Spring Cloud构建微服务架构:分布式服务跟踪(整合zipkin)【Dalston版】
通过上一篇<分布式服务跟踪(整合logstash)>,我们虽然已经能够利用ELK平台提供的收集.存储.搜索等强大功能,对跟踪信息的管理和使用已经变得非常便利.但是,在ELK平台中的数据分析 ...
- Spring Cloud构建微服务架构:服务容错保护(Hystrix断路器)
断路器 断路器模式源于Martin Fowler的Circuit Breaker一文."断路器"本身是一种开关装置,用于在电路上保护线路过载,当线路中有电器发生短路时," ...
- Spring Cloud构建微服务架构(七)消息总线(续:Kafka)
Spring Cloud Bus除了支持RabbitMQ的自动化配置之外,还支持现在被广泛应用的Kafka.在本文中,我们将搭建一个Kafka的本地环境,并通过它来尝试使用Spring Cloud B ...
- Spring Cloud构建微服务架构(五)服务网关
通过之前几篇Spring Cloud中几个核心组件的介绍,我们已经可以构建一个简略的(不够完善)微服务架构了.比如下图所示: alt 我们使用Spring Cloud Netflix中的Eureka实 ...
- Spring Cloud构建微服务架构:服务容错保护(Hystrix服务降级)【Dalston版】
前言 在微服务架构中,我们将系统拆分成了一个个的服务单元,各单元应用间通过服务注册与订阅的方式互相依赖.由于每个单元都在不同的进程中运行,依赖通过远程调用的方式执行,这样就有可能因为网络原因或是依赖服 ...
- Spring Cloud构建微服务架构:服务容错保护(Hystrix断路器)【Dalston版】
前言 在前两篇<Spring Cloud构建微服务架构:服务容错保护(Hystrix服务降级)>和<Spring Cloud构建微服务架构:服务容错保护(Hystrix依赖隔离)&g ...
- Spring Cloud构建微服务架构:服务容错保护(Hystrix服务降级)【Dalston版】 1
前言 在微服务架构中,我们将系统拆分成了一个个的服务单元,各单元应用间通过服务注册与订阅的方式互相依赖.由于每个单元都在不同的进程中运行,依赖通过远程调用的方式执行,这样就有可能因为网络原因或是依赖服 ...
- Spring Cloud构建微服务架构:消息驱动的微服务(核心概念)【Dalston版】
通过<Spring Cloud构建微服务架构:消息驱动的微服务(入门)>一文,相信大家对Spring Cloud Stream的工作模式已经有了一些基础概念,比如:输入.输出通道的绑定,通 ...
- Spring Cloud构建微服务架构-Hystrix断路器
断路器 断路器模式源于Martin Fowler的Circuit Breaker一文."断路器"本身是一种开关装置,用于在电路上保护线路过载,当线路中有电器发生短路时," ...
- Spring Cloud构建微服务架构:分布式服务跟踪(整合logstash)【Dalston版】
通过之前的<入门示例>,我们已经为两个由SpringCloud构建的微服务项目 trace-1和 trace-2引入了Spring Cloud Sleuth的基础模块 spring-clo ...
最新文章
- celery的使用(最新详细解析)
- Flutter——设置appBar的高度
- java如何调用thrift_java – 我想在一个传输上使用多个服务(Thrift)
- python messagebox一定要指定父窗体吗,为什么要使用的MessageBox.show一个所有者窗口?...
- What every programmer needs to know about game networking
- Visual Studio 2015 update 3各版本下载地址
- 在Swift中使用C语言的指针
- 计算机专业学生求职信500字,计算机专业求职信500字范文
- 2022年全球营销趋势
- Confluence 6 € 欧元字符集不能正常显示
- django框架之模板系统
- iPhone文件系统:创建、重命名以及删除文件
- tensorflow分布式运行
- 学习笔记-Rabin-Karp哈希
- 在职研究生-学术硕士和专业硕士有什么区别?
- 嵌入式Qt-做一个秒表
- 如何下载youtube、土豆网、56我乐网和新浪视频文件
- 依据Right-BICEP要求的对四则运算2的测试
- 多伦多大学计算机专音乐专业,终于懂了加拿大音乐专业学院推荐
- 去除WinRar中广告的办法