在上两篇文章中,我们已经搭建起微服务架构中的核心组件 服务注册 中心(包括单节点模式和高可用模式)。同时, 还对上一章中实现的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的更多相关文章

  1. 服务治理框架:Spring Cloud Eureka

    最近在学习Spring Cloud的知识,现将服务治理框架 Spring Cloud Eureka 的相关知识笔记整理如下.[采用 oneNote格式排版]

  2. 微服务组件--注册中心Spring Cloud Eureka分析

    Eureka核心功能点 [1]服务注册(register):Eureka Client会通过发送REST请求的方式向Eureka Server注册自己的服务,提供自身的元数据,比如ip地址.端口.运行 ...

  3. Spring Cloud Eureka(三):认识Eureka Server 与 Eureka Client

    Spring Cloud Netflix 是什么 This project provides Netflix OSS integrations for Spring Boot apps through ...

  4. Spring Cloud Eureka(一): 开篇说明及目录汇总

    开篇简述 基于Spring Boot 和 Spring Cloud 的微服务应用,本人在工作中已经使用两年有余了,伴随着个人学习计划的实施,希望借助博文的方式,将工作中使用到的技术点体系化的总结出来, ...

  5. 笔记:Spring Cloud Eureka 服务发现与消费

    服务发现与消费,其服务发现的任务是由Eureka的客户端完成,而服务的消费任务由Ribbon.JerseyClient等完成,Ribbon是一个基于HTTP和TCP的客户端负载均衡器:使用Jersey ...

  6. Spring Cloud Eureka 服务发现与消费

    服务发现与消费,其服务发现的任务是由Eureka的客户端完成,而服务的消费任务由Ribbon.JerseyClient等完成,Ribbon是一个基于HTTP和TCP的客户端负载均衡器:使用Jersey ...

  7. Spring Cloud Eureka 实现服务注册与发现

    微服务 是一种架构模式,跟具体的语言实现无关,微服务架构将业务逻辑分散到了各个服务当中,服务间通过网络层进行通信共同协作:这样一个应用就可以划分为多个服务单独来维护发布.构建一个可靠微服务系统是需要具 ...

  8. Spring Cloud 服务发现和消费

    服务的发现和消费 有了服务中心和服务提供者,下面我们来实现一个服务的消费者: 服务消费者主要完成两个任务——服务的发现和服务的消费,服务发现的任务是由Eureka客户端完成,而服务消费的任务是由Rib ...

  9. SpringBoot + Spring Cloud Eureka 服务注册与发现

    什么是Spring Cloud Eureka Eureka是Netflix公司开发的开源服务注册发现组件,服务发现可以说是微服务开发的核心功能了,微服务部署后一定要有服务注册和发现的能力,Eureka ...

随机推荐

  1. 用python解析word文件(三):style

    太长了,我决定还是拆开三篇写.   (一)段落篇(paragraph) (二)表格篇(table) (三)样式篇(style)(本篇) 选你所需即可.下面开始正文. 在前两篇中,我们已经解析出了par ...

  2. NSKeyValueObserving.m

    https://github.com/farcaller/cocotron/blob/af740de86c9bee84c59ffc74d27e5df9e22e1391/Foundation/NSKey ...

  3. BZOJ1022:[SHOI2008]小约翰的游戏John(博弈论)

    Description 小约翰经常和他的哥哥玩一个非常有趣的游戏:桌子上有n堆石子,小约翰和他的哥哥轮流取石子,每个人取的时候,可以随意选择一堆石子,在这堆石子中取走任意多的石子,但不能一粒石子也不取 ...

  4. 3282. Tree【LCT】

    Description 给定N个点以及每个点的权值,要你处理接下来的M个操作. 操作有4种.操作从0到3编号.点从1到N编号. 0:后接两个整数(x,y),代表询问从x到y的路径上的点的权值的xor和 ...

  5. 1055. [HAOI2008]玩具取名【区间DP】

    Description 某人有一套玩具,并想法给玩具命名.首先他选择WING四个字母中的任意一个字母作为玩具的基本名字.然后 他会根据自己的喜好,将名字中任意一个字母用“WING”中任意两个字母代替, ...

  6. Windows启动控制台登录模式

    效果如下: 实现代码: Set-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\Lo ...

  7. BI之报表测试总结

    报表测试总结: 1.测试准备工作: 数据准备 保证足够多的有效数据 清楚报表中涉及到的算法.公式 清楚业务功能接口 2.报表测试点 基本测试点:界面.控件.格式.布局.明显的数据错误.js报错.报表标 ...

  8. CentOS 6.4 编译安装 gcc 4.8.1

    今天在isocpp上看到“GCC 4.8.1 released, C++11 feature complete”这个消息,非常兴奋.终于有一个全面支持C++11语言特性的编译器了! 当然了,gcc仅仅 ...

  9. css权威指南学习笔记--列表与生成内容

    列表属性 1.list-style-type:css2多于css2.1 2.list-style-image:有继承,子级列表会继承该图像 3.list-style-position:inside|o ...

  10. json_decode($str,true)的结果为null

    //$result为传进来的json值 $result = $this->params['auth_result']; //html_entity_decode进行HTML 实体转换为字符 // ...