服务发现与消费 --> Spring Cloud Eureka
在上两篇文章中,我们已经搭建起微服务架构中的核心组件 服务注册 中心(包括单节点模式和高可用模式)。同时, 还对上一章中实现的Spring Boot入门程序 做了改造。 通过简单的配置,使该程序注册到Emeka注册中心上,成为该服务治理体系下 的一个服务,命名为hello-service。 现在我们已经有了服务注册中心和服务提供者, 下面就来尝试构建一个服务消费者,它主要完成两个目标,发现服务以及消费服务。其中, 服务发现的任务由Eureka的客户端完成,而服务消费的任务由ribbon完成。Ribbon是一个基 千HTTP和TCP的客户端负载均衡器,它可以在通过客户端中配置的 ribbonServerList 服务端列表去轮询访问以达到均衡负载的作用。 当Ribbon与Eureka联合使用时,ribbon 的服务实例清单ribbonServerList会被DiscoveryEnabledNIWSServerList重写, 扩展成从Eureka注册中心中获取服务端列表。 同时它也会用 NIWSDiscoveryPing 来取代IPing, 它将职责委托给Eureka来确定服务端是否已经启动。
下面我们通过构建一个简单的示例,看看在Eureka的服务治理体系下如何实现服务的 发现与消费。
• 首先,我们做一些准备工作 。启动之前实现的服务注册中心 eureka-server以及 hello-service服务,为了实验ribbon的客户端负载均衡功能, 我们通过 java -jar命令行的方式来启动两个不同端口的hello-service, 具体如下:
java -jar Eureka-0.0.1-SNAPSHOT.jar --server.port=8081 java -jar Eureka-0.0.1-SNAPSHOT.jar --server.port=8082
• 在成功启动两个hello-service服务之后, 如下图所示,从Eureka信息面板中 可以看到名为HELLO-SERVICE的服务中出现了两个实例单元,分别是通过命令行 启动的8081端口和8082端口的服务。

• 创建一个 Spring Boot 的基础工程来实现服务消费者, 取名为 ribbon-consumer, 并在 pom.xml 中引入如下的依赖内容。 较之前的 hello-service, 我们新增了 Ribbon 模块的依赖spring-cloud-starter-ribbon。

pom.xml

• 创建应用主类ConsumerApplication, 通过@EnableDiscoveryClient注解 让该应用注册为 Eureka客户端应用, 以获得服务发现的能力。 同时, 在该主类中创 建RestTemplate的 Spring Bean 实例,并通过@LoadBalanced 注解开启客户端 负载均衡。

• 创建ConsumerController类并实现/ribbon-consumer接口。 在该接口中, 通过在上面创建的RestTemplate 来实现对 HELLO-SERVICE服务提供的 /hello接口进行调用。 可以看到这里访问的地址是服务名HELLO-SERVICE,而 不是一个具体的地址,在服务治理框架中, 这是一个非常重要的性特。

• 在application.properties中配置Eureka服务注册中心的位置, 需要与之前 HELLO-SEVRCIE 一样, 不然是发现不了该 服务的,同时设置该消费者的端口为 9000, 不能与之前启动的应用端口冲突。

• 启动ribbon-consumer 应用后, 我们可以在 Eureka 信息面板中看到, 当前除了 HELLO-SERVICE 之外, 还多了我们实现的RIBBON-CONSUMER服务。

• 通过向 http://localhost:9000/ribbon-consumer 发起 GET 请求, 成功返 回了 "Hello World"。 此时, 我们可以在 ribbon-consumer 应用的控制台中看到 如下信息, Ribbon 输出了当前客户端维护的 HELLO-SERVICE 的服务列表情况。其 中包含了各个实例的位置, ribbon 就是按照此信息进行轮询访问, 以实现基千客户 端的负载均衡。 另外还输出了一些其他非常有用的信息, 如对各个实例的请求总数 量、 第一次连接信息、 上一次连接信息、 总的请求失败数量等。

再尝试发送几次请求, 并观察启动的两个 HELLO-SERVICE 的控制台, 可以看到两个控 制台会交替打印下面的日志, 这是我们之前在 HelloController 中实现的对服务信息的输 出, 可以用来判断当前豆bbon-consumer 对HELLO-SERVICE 的调用是否是负载均衡的。
com.didispace.web.HelloController : /hello , host:PC-201807022055
service id:hello-service
服务发现与消费 --> Spring Cloud Eureka的更多相关文章
- 服务治理框架:Spring Cloud Eureka
最近在学习Spring Cloud的知识,现将服务治理框架 Spring Cloud Eureka 的相关知识笔记整理如下.[采用 oneNote格式排版]
- 微服务组件--注册中心Spring Cloud Eureka分析
Eureka核心功能点 [1]服务注册(register):Eureka Client会通过发送REST请求的方式向Eureka Server注册自己的服务,提供自身的元数据,比如ip地址.端口.运行 ...
- Spring Cloud Eureka(三):认识Eureka Server 与 Eureka Client
Spring Cloud Netflix 是什么 This project provides Netflix OSS integrations for Spring Boot apps through ...
- Spring Cloud Eureka(一): 开篇说明及目录汇总
开篇简述 基于Spring Boot 和 Spring Cloud 的微服务应用,本人在工作中已经使用两年有余了,伴随着个人学习计划的实施,希望借助博文的方式,将工作中使用到的技术点体系化的总结出来, ...
- 笔记:Spring Cloud Eureka 服务发现与消费
服务发现与消费,其服务发现的任务是由Eureka的客户端完成,而服务的消费任务由Ribbon.JerseyClient等完成,Ribbon是一个基于HTTP和TCP的客户端负载均衡器:使用Jersey ...
- Spring Cloud Eureka 服务发现与消费
服务发现与消费,其服务发现的任务是由Eureka的客户端完成,而服务的消费任务由Ribbon.JerseyClient等完成,Ribbon是一个基于HTTP和TCP的客户端负载均衡器:使用Jersey ...
- Spring Cloud Eureka 实现服务注册与发现
微服务 是一种架构模式,跟具体的语言实现无关,微服务架构将业务逻辑分散到了各个服务当中,服务间通过网络层进行通信共同协作:这样一个应用就可以划分为多个服务单独来维护发布.构建一个可靠微服务系统是需要具 ...
- Spring Cloud 服务发现和消费
服务的发现和消费 有了服务中心和服务提供者,下面我们来实现一个服务的消费者: 服务消费者主要完成两个任务——服务的发现和服务的消费,服务发现的任务是由Eureka客户端完成,而服务消费的任务是由Rib ...
- SpringBoot + Spring Cloud Eureka 服务注册与发现
什么是Spring Cloud Eureka Eureka是Netflix公司开发的开源服务注册发现组件,服务发现可以说是微服务开发的核心功能了,微服务部署后一定要有服务注册和发现的能力,Eureka ...
随机推荐
- taskset
常常感觉系统资源不够用,一台机子上跑了不下3个比较重要的服务,但是每天我们还要在上面进行个备份压缩等处理,网络长时间传输,这在就很影响本就不够用的系统资源: 这个时候我们就可以把一些不太重要的比如co ...
- jquery环形3D立体旋转特效
jquery环形3D立体旋转特效 作者/代码整理:站长素材 (转载请附加本文地址,带有“懒人原生”字样的谢绝转载)发布日期:2013-07-20 立体效果比较强的jquery特效,周围小图组 ...
- 3631. [JLOI2014]松鼠的新家【树形DP】
Description 松鼠的新家是一棵树,前几天刚刚装修了新家,新家有n个房间,并且有n-1根树枝连接,每个房间都可以相互到达,且俩个房间之间的路线都是唯一的.天哪,他居然真的住在“树”上.松鼠想邀 ...
- [USACO09MAR]Moon Mooing
嘟嘟嘟 某谷的翻译挺迷的,简单来说就是给一个初值c,然后有两个函数f1 = a1 * x / d1 + b1, f2 = a2 * x / d2 + b2.把c分别带进去,所得的结果也递归带进去,这样 ...
- Java执行CMD命令
参见:https://blog.csdn.net/lixingshi/article/details/50467840 public static void runtimeCommand() thro ...
- Hive学习之路 (二十)Hive 执行过程实例分析
一.Hive 执行过程概述 1.概述 (1) Hive 将 HQL 转换成一组操作符(Operator),比如 GroupByOperator, JoinOperator 等 (2)操作符 Opera ...
- C# HttpWebRequest请求超时解决办法
request.GetResponse();超时问题的解决,和HttpWebRequest多线程性能问题,请求超时的错误, 解决办法 1.将http的request的keepAlive设置为false ...
- 20155314 2016-2017-2 《Java程序设计》第1周学习总结
20155314 2016-2017-2 <Java程序设计>第1周学习总结 学习目标 了解Java基础知识(已完成) 了解JVM.JRE与JDK,并下载.安装.测试JDK(已完成) 了解 ...
- spark机制理解(一)
一 基本术语 Application: 基于Spark的用用户程序,包含了Driver程序和集群上的Executor. Driver Program: 运行行main函数并且新建SparkCont ...
- 名字&值
1)名字VS值 名字和内存(存储)位置相关联. 名字—(环境)———>位置——(状态)——>值 这两个映射都在随着程序的运行而改变. 2)环境VS状态 环境是指一个名字到存储位置映射,也可 ...