为什么要用服务注册?为什么要用consul不用eureka?
举个栗子:
微服务当中存在多个服务模块,每个服务模块的ip端口在每套环境是不一致的,开发切换环境部署时,如果漏了一个配置忘记改动,将是一个很麻烦的事情,且如果集群当中,固定死的ip端口无法实现微服务的负载均衡,所以为了更好的减轻工作负担提高工作效率,针对不同情况适当引入服务治理功能,可以帮我们实现微服务之间的动态注册与发现。
不用eureka原因:
1、已暂停维护
2、对初学者不友好
3、本身也是个服务,需要开发去维护,无法与自己项目解耦,且后续有了更好的产品代替
目录
- consul简介
- 是什么
- 作用
- 安装使用
- 服务注册与发现
- 服务配置与刷新
- 服务配置
- 动态刷新
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页面
服务注册与发现
- 发现服务
项目引入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}{咱们来日方长,有缘江湖再见,告辞!}
咱们来日方长,有缘江湖再见,告辞!