consul服务注册与发现、服务配置与刷新

为什么要用服务注册?为什么要用consul不用eureka?

举个栗子:

微服务当中存在多个服务模块,每个服务模块的ip端口在每套环境是不一致的,开发切换环境部署时,如果漏了一个配置忘记改动,将是一个很麻烦的事情,且如果集群当中,固定死的ip端口无法实现微服务的负载均衡,所以为了更好的减轻工作负担提高工作效率,针对不同情况适当引入服务治理功能,可以帮我们实现微服务之间的动态注册与发现。

不用eureka原因:

1、已暂停维护

2、对初学者不友好

3、本身也是个服务,需要开发去维护,无法与自己项目解耦,且后续有了更好的产品代替

目录

consul简介

官网地址:https://www.consul.io/

是什么

Consu 是一套开源的分布式服务发想和配置管理系,由HashiCorp公司用Go言开发。提供了微服务系统中的服务治理、配程中心、控制总线等功能。这些功能中的每一个都可以根据需要单独使用。也可以一起使用以构建全方位的服务网格。总之Consu提供了一种完整的服务网格解决方案。它具有很多优点。包括:基于r化协议。比较简洁: 文持健康检査,同时文持 HTTP和 DNS 协议文持跨数拟中心的WVAN 集群提供图形界面跨平台。支持Linux、Mac、Windows

作用

  • 服务发现:提供http和dns两种发现方式
  • 监控检测:支持多种方式,http、tcp、docker、shell脚本定制
  • kv存储:key、value的存储方式(服务配置中使用到)
  • 多数据中心
  • 可视化的web界面

安装使用

下载路径:https://developer.hashicorp.com/consul/install

根据自己操作系统下载,具体下载如何安装,可自行网上搜索教程,下载后 输入命令 consul -verison,如果安装成功后出现以下配置信息则是安装成功,输入命令启动consul,consul agent -dev,启动成功后可访问http://localhost:8500页面

服务注册与发现

  1. 发现服务

项目引入consul的maven依赖,具体参考springcloud consul官方文档https://docs.spring.io/spring-cloud-consul/reference/quickstart.html

2、配置yml

3、springboot主启动类加上注解@EnableDiscoveryClient,用来开启服务发现

4、启动项目,访问consul界面,能发现服务已经注册上去了,如果有红叉不用担心,有延迟

如果项目出现以下日志,想要去掉

在maven中排除log包即可

服务注册完成后,后续restful接口调用的话可直接配置成域名+服务名,不用ip+端口写死

如果调用服务报错提示,找不到该服务,请在restTemplate配置中加上图下注解@LoadBalanced

原因是之前指定ip+端口,restTemplate知道明确要调用的是哪台机器的服务,用服务名调用的话,如果存在服务集群,不加该注解,不知道给指派给哪个服务,所以会报错找不到该服务。

服务配置与刷新

微服务意味着要将单体应用中的业务拆分成一个个子服务,每个服务的较度相对较小,因此系统中会出现大量的服务。由于每个服务都需要必要的配置信息才能运行,所以一套集中式的、动态的配置管理设施是必不可少的。比如某些配置文件中的内容大部分都是相同的,只有个别的配置项不同。就拿数据库配置来说吧,如果每个微服务使用的技术栈都是相同的,则每个微服务中关于数据库的配置几乎都是相同的,有时候主机迁移了,就希望一次修政,处处生效。

consul的其中一个特性是支持这种页面上修改配置,能动态更新项目中的配置。

如何配置,参考官网:https://docs.spring.io/spring-cloud-consul/reference/config.html

服务配置

1、加入maven依赖

2、新增bootstrap.yml文件,将application.yml中希望能随时更改的放到bootstrap.yml中

profile-separator配置默认英文逗号分割,我们改为常用的-,用来区分不同环境的配置文件,具体原因后面步骤会说明

3、新增kv配置文件

consul如何知道每个服务的相对应的配置文件呢,是有一套约定规则的,参考图上,profile-separator国外是用英文逗号隔开的,所以文档也是config/后面服务名,环境/data,中间是可以随我们自己改动,config和data的目录是固定的,我们也可以改为用-来进行区分,例如

config/my-procet/data

config/my-procet-dev/data

config/my-procet-prod/data

默认找第一个,如果配置具体环境,则会指定配置文件去更新项目的配置文件

consul的创建kv配置也是有规则的

创建config文件夹-》创建服务名-环境文件夹-》创建data配置文件

创建文件夹名称后面多加个/,就会生成文件夹,不加/则生成文件


文件目录必须写对,否则data文件更新配置时,java项目是不会被consul动态更新的!!!

动态刷新

主启动类加上刷新注解@RefreshScope

如果改了consul上面的配置,项目中没有实时刷新不要担心(前提是consul文件路径配置正确),有延迟间隔55秒,如果想要立马生效可以加以下配置,spring.cloud.consul.confg.watch.wait-time,单位秒

问题:consul所在的服务器/consul重启后,之前配置的服务注册、config kv键值对数据还在吗?

答案:如果不做consul的配置和数据持久化配置,重启后是会清空。

至于怎么去做持久化,不难,大家自己发发力去找答案吧~

就先说到这 \color{#008B8B}{ 就先说到这} 就先说到这
在下 A p o l l o \color{#008B8B}{在下Apollo} 在下Apollo
一个爱分享 J a v a 、生活的小人物, \color{#008B8B}{一个爱分享Java、生活的小人物,} 一个爱分享Java、生活的小人物,
咱们来日方长,有缘江湖再见,告辞! \color{#008B8B}{咱们来日方长,有缘江湖再见,告辞!} 咱们来日方长,有缘江湖再见,告辞!

相关推荐
茶馆大橘3 小时前
微服务系列六:分布式事务与seata
分布式·docker·微服务·nacos·seata·springcloud
WANT_如初2 天前
Nacos集群搭建
java·springcloud·nacos集群
茶馆大橘4 天前
微服务系列三:微服务核心——网关路由
java·运维·网关·微服务·架构·springcloud
xxxLin5 天前
OpenFeign简单使用
springcloud
茶馆大橘6 天前
跨微服务请求优化——注册中心+OpenFeign(第二篇)
java·运维·微服务·nacos·springcloud
程序员大佬超9 天前
Consul微服务配置中心部署(在线安装)
微服务·consul
程序猿进阶14 天前
SpringColoud GateWay 核心组件
java·后端·微服务·性能优化·架构·gateway·springcloud
周周写不完的代码15 天前
SpringCloudAlibaba-Nacos
java·分布式·springcloud
晨港飞燕15 天前
SpringCloudAlibaba升级手册
springboot·springcloud