首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Consul 初步实现服务注册发现,配置中心,负载均衡

一、简述Consul 实现服务注册发现,配置中心,负载均衡

环境搭建

consul 版本:1.4.0

Spring Boot: 2.0.5.RELEASE

Spring Cloud: Finchley.SR2

数据库:H2

虚拟机搭建(这里我使用了三个虚拟机来模拟):centos 2 * X + 1 台

搭建步骤省略,在这里只专注于代码层面描述,大家参考网络上的文档

构建两个Spring Boot应用:

部署在三台consul虚拟机(服务器)上,应用启动时,注册到consul中

通过ConsulConfig统一管理应用配置

服务提供者:cloud-consul-producer

服务消费者:cloud-consul-consumer *在本机启动,用于测试服务发现和负载均衡

Spring官方文档介绍:

Service Discovery: instances can be registered with the Consul agent and clients can discover the instances using Spring-managed beans

Supports Ribbon, the client side load-balancer via Spring Cloud Netflix

Supports Zuul, a dynamic router and filter via Spring Cloud Netflix

Distributed Configuration: using the Consul Key/Value store

Control Bus: Distributed control events using Consul Events

URL:https://spring.io/projects/spring-cloud-consul

Spring Cloud Consul features:

二、服务提供者 cloud-consul-producer

依赖:

多个服务提供者实现一个服务,系统为客户端提供多个实现,并把他们从多个实现中解耦出来。服务提供者的改变对它们的客户端是透明的,这样提供了更好的可扩展性。

开启服务发现客户端

@EnableDiscoveryClient基于spring-cloud-commons 实现的服务发现客户端

在Consul中注册了我们的应用,我们需要找到服务端,因此通过该注解来发现客户端服务来从Consul中获取可用的服务。

然后,我们可以将DiscoveryClient bean注入我们的控制器并访问实例:

相关配置(此处仅用于介绍,后面我们通过ConsulConfig配置中心来统一管理配置)

H2数据库配置文件(此处仅用于介绍,后面我们通过ConsulConfig配置中心来统一管理配置)

用于测试的Bean

上述完成了我们的服务提供者应用构建,在应用启动时会通过配置文件中的:

来找到cousul所在的位置,并将自己注册到consul服务中,下面来介绍ConsulConfig应用配置中心,目前我只使用到了KEY/VALUE方式,git2以后有需要再去研究

ConsulConfig 应用配置中心

依赖

此功能允许在所有服务之间同步配置。Consul将监视任何配置更改,然后触发所有服务的更新。

我们还需要将Consul和Spring应用程序名称的设置从application.yml文件移动到Spring首先加载的bootstrap.yml文件中。

然后,我们需要启用Spring Cloud Consul Config:

接下来需要在consul服务端配置KEY/VALUE

Spring Cloud Consul Config将默认在“/config/dobdop-dev”中查找data中的属性

这是因为上面的配置文件中配置的prefix、default-context、profile-separator等相关配置决定,详见上面的配置备注

如果没有*-dev则默认会查找/config/dobdop,不存在就会抛出异常,应用无法启动

配置文件中的路径是'/config/dobdop-dev',KEY是‘data'。VALUE则是我们application.yml中的配置

小坑:如果是手动配置Condul中的KEY/VALUE,请不要使用“TAB”键,必须使用空格来格式化配置

建议先在本地配置好yml直接复制到consul中

如果没有配置profile-separator则默认路径名称应该创建为:'config/dobdop,dev',默认以逗号来区分环境

配置好bootstrap.yml后我们就可以通过注解的形式来加载配置中心的值

更新配置

使用@RefreshScope注解注释的所有bean 将在配置更改后刷新,字段属性是MyProperties类具有@RefreshScope注解

三、服务消费者&负载均衡的初步实现:cloud-consul-consumer

依赖

服务发现不需要注册到consul中,因此我们不需要在启动类上添加注解:@EnableDiscoveryClient

同时配置文件也不需要开启服务发现:

定义配置类

consul中添加了Netflix 的 Ribbon等相关模块依赖,因此添加了consul的spring-cloud-starter-consul-discovery依赖后相关模块都会加载到应用中

RestTemplate设计是为了Spring更好的请求并解析Restful风格的接口返回值而设计的,通过这个类可以在请求接口时直接解析对应的类(来源于网络)

想要通过客户端RestTemplate去访问我们的微服务时候自带负载均衡,我们需要通过注解@LoadBalanced开启负载均衡

创建RestTemplate Bean时我们添加了注解@LoadBalanced只会,可以通过微服务名字从Consul上找到并访问相关服务,默认使用轮询算法

自定义负载均衡算法需要我们添加IRule Bean,这里我目前只测试了随机算法,见上面的代码

RestTemplate使用示例:

通过上面的代码,我们可以看到在调用服务提供者时,只需要定义URL:http://dobqop-consul-service-yml,RestTemplate组合注解@LoadBalanced实现了负载均衡

以下为本次应用截图:

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181231G0RRDB00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券