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 天前
《SpringCloud实用版》Stream + RocketMQ 实现可靠消息 & 事务消息
后端·rocketmq·springcloud·消息中间件·事务消息
没有bug.的程序员4 天前
Spring Cloud Stream:消息驱动微服务的实战与 Kafka 集成终极指南
java·微服务·架构·kafka·stream·springcloud·消息驱动
七夜zippoe5 天前
服务注册发现核心揭秘 Eureka、Nacos、Consul全方位对比
spring cloud·云原生·eureka·nacos·consul·cap
没有bug.的程序员5 天前
Spring Cloud Gateway:API网关限流与熔断实战
java·开发语言·数据库·spring boot·gateway·api·springcloud
AC赳赳老秦8 天前
文旅行业:DeepSeek处理客流数据生成预测模型与调度建议
人工智能·云原生·容器·kubernetes·notepad++·consul·deepseek
wfsm9 天前
nacos和openfeign
springcloud
无心水9 天前
【分布式利器:腾讯TSF】11、腾讯TSF微服务框架深度对比:全面解析TSF vs Spring Cloud vs Dubbo vs Service Mesh
分布式·spring cloud·微服务·dubbo·springcloud·service mesh·分布式利器
sunnyday042611 天前
Spring Cloud Alibaba Sentinel 流量控制与熔断降级实战指南
spring boot·sentinel·springcloud
悟空码字13 天前
Spring Cloud 集成 Nacos,全面的配置中心与服务发现解决方案
java·nacos·springcloud·编程技术·后端开发
七夜zippoe19 天前
微服务架构:FastAPI实战指南与Kubernetes部署
微服务·架构·负载均衡·fastapi·consul