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

    #mapply(函数/函数名,数据,函数相关的函数) > list(rep(1,4),rep(2,3),rep(3,2),rep(4,1)) [[1]] [1] 1 1 1 1 [[2]] [1 ...

  2. Kubernetes-dns 服务搭建

    DNS 服务不是独立的系统服务,而是一种 addon ,作为插件来安装的,不是 kubernetes 集群必须的(但是非常推荐安装).可以把它看做运行在集群上的应用,只不过这个应用比较特殊而已. DN ...

  3. Js 中的事件委托/事件代理

    什么叫事件委托/事件代理呢 ? JavaScript高级程序设计上讲:事件委托就是利用事件冒泡,只指定一个事件处理程序,就可以管理某一类型的所有事件.   事件冒泡: 当事件发生后,这个事件就要开始传 ...

  4. LeetCode559. Maximum Depth of N-ary Tree

    第一次写出了具有迭代和递归的函数,还是有点收获的,虽然题目比较简答 当要对某些对象重复使用时,考虑循环,也就是迭代 当函数可以简化一个重复的操作时,考虑递归,而且就当下一次使用这和函数的结果已经有啦, ...

  5. P2758 编辑距离

    题目描述 设A和B是两个字符串.我们要用最少的字符操作次数,将字符串A转换为字符串B.这里所说的字符操作共有三种: 1.删除一个字符: 2.插入一个字符: 3.将一个字符改为另一个字符: !皆为小写字 ...

  6. GoogleTest初探(1)

    此篇主要了解一下GoogleTest中的断言. 总的来说,GoogleTest中的断言分为两大类:EXPECT_*和ASSERT_*,这两者在测试成功或失败后均会给出测试报告,区别是前者在测试失败后会 ...

  7. MariaDB快速批量插入数据的几种办法

    前言 当要向MariaDB中插入新的数据时,以下过程会影响插入所消耗的时间:(按时间消耗长短降序排序) 将数据sync到磁盘上(它是事务结束的一部分) 添加新的键值.索引越大,更新键值所消耗的时间就越 ...

  8. PHPCMS v9 手机版如何设置独立域名

    一.在PHPcms V9管理后台设置手机门户(目前phpcms v9 版本为V9.6.3) 1.1.开启手机网站.位置:模块 >手机门户 > 添加手机站点,具体设置可参照截图: 填写站点名 ...

  9. Hadoop的HDFS和MapReduce的安装(三台伪分布式集群)

    一.创建虚拟机 1.从网上下载一个Centos6.X的镜像(http://vault.centos.org/) 2.安装一台虚拟机配置如下:cpu1个.内存1G.磁盘分配20G(看个人配置和需求,本人 ...

  10. C语言学习记录_2019.02.23

    char类型的输出: scanf("%d",&i);//i=49; char x=i; printf("x=%d\n",x); printf(" ...