42. 从零开始学springboot整合alibaba-nacos做注册/配置中心

前言

随着 服务化 的普及, 你会发现越来越多的公司开始服务化的调整, 那么有哪些变化呢?

你会发现, 原来一个接口就实现了一套逻辑功能, 而服务化后, 服务拆分的维度更细了, 实现一个功能, 可能需要同时协同很多的服务接口!

服务的拆分维度更细当然是有好处的, 服务间耦合度更低, 复用性更强, 但是随之而来的是服务间配置及管理成本的上升!

所以, 为了解决这些服务治理成本, Nacos应运而生.

Nacos 是阿里巴巴的开源项目,其核心定位是 动态服务发现、配置和服务管理平台

简而言之 nacos两个功能:

  • 服务发现及管理
  • 配置的管理

需要注意的是, Nacos本身是个独立的服务, 可以单独部署!

下面, 我们来实践下Nacos的部署,以及和Springboot的配合~

Docker 安装Nacos

下载nacos镜像

docker pull nacos/nacos-server

查看镜像

docker images

以单机模式运行nacos

# 登录密码默认nacos/nacos
# standalone代表着单机模式运行,非集群模式
docker run --env MODE=standalone --name nacos -d -p 8848:8848 nacos/nacos-server

访问Nacos

http://localhost:8848/nacos
image.png

配置Nacos

访问地址:http://localhost:8848/nacos
默认账号: nacos
默认密码: nacos

进入配置页面

创建一个新命名空间(你可以理解为一个组)

默认有个public公共空间, 我新建了sb-alibaba-nacos空间


image.png

创建完成后我们就可以直接开始服务的配置了

把服务的相关配置加入此即可.

image.png

我们新增sb-alibaba-nacos服务的两套环境的配置, dev 和 test

dev (服务端口: 8081):


image.png

test(服务端口: 8082):


image.png

再新建一个通用的配置(实际情况就是很多服务,大部分的配置是共用的, 少部分是自定义的,
nacos支持这样的配置) common


image.png

点击发布即可.

Springboot 整合 alibaba nacos

我们引入依赖

    <properties>
        <spring-cloud.version>Hoxton.SR4</spring-cloud.version>
        <spring-cloud-alibaba-version>2.2.1.RELEASE</spring-cloud-alibaba-version>
    </properties>

<dependencyManagement>
        <dependencies>
            <!--SpringCloud依赖 -->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

            <!--SpringCloud Alibaba依赖 -->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>${spring-cloud-alibaba-version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

        </dependencies>
    </dependencyManagement>


    <dependencies>
        <!--Nacos服务注册/发现依赖 -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>

        <!--Nacos配置中心 -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
    </dependencies>

这里特别强调下, 必须要引入和springboot匹配版本的springcloud依赖哦, 否则会启动报错

org.springframework.beans.factory.BeanCreationException:Error creating bean with name 'nacosAutoServiceRegistration' defined in classpath resource....

大致的版本对应关系如下


image.png

更详细的请去https://start.spring.io/actuator/info
查询!

这里, 咸鱼为了使用新特性, 所以spring-boot使用2.2.6.RELEASE版本, 所以对应的spring-cloud版本为Hoxton.SR4, spring-cloud-alibaba版本为2.2.1.RELEASE!

注意, 低版本的springboot会出现无法注册分组功能
也就是项目启动后, 当你在项目的alibaba nacos配置文件里填写了分组名称时,

image.png

在nacos 服务管理页面会发现分组名称并没注册上(也就是显示为default, 并不是我们指定的dev)

image.png

配置springboot

要想springboot项目向nacos注册以及从nacos读取配置,我们就必须在项目中加上简单的配置

首先在启动类上加上注解@EnableDiscoveryClient

image.png

其次, 新建一个项目的配置文件bootstrap.properties (nacos的配置就在此, springboot会优先读取bootstrap.properties配置, 其次才是application.properties)

image.png
# 服务名, 会在nacos上显示服务的名称
spring.application.name=sb-alibaba-nacos

# 指定生效的配置为 dev
spring.profiles.active=dev

##################### Nacos基本配置
###### 1、注册中心配置
# Nacos注册中心地址, 也就是nacos所在 ip:端口
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848

# 配置注册中心namespace id, 我们nacos创建空间时生成的唯一id
spring.cloud.nacos.discovery.namespace=070cc848-3106-49eb-a3be-3d5994701d96

# 指定注册中心namespace的group, 这个group可以随意指定, 会显示在nacos上
spring.cloud.nacos.discovery.group=dev


##### 2、配置中心配置
# Nacos配置中心地址
spring.cloud.nacos.config.server-addr=127.0.0.1:8848

# 指定读取的配置文件后缀名,  我们nacos上新建配置时,配置的后缀格式
spring.cloud.nacos.config.file-extension=properties

# 指定命名空间, 必须指定id, 不能指定名称
spring.cloud.nacos.config.namespace=070cc848-3106-49eb-a3be-3d5994701d96

# 指定Group
spring.cloud.nacos.config.group = sb-alibaba-nacos

#### 相同namespace,不同group下的服务共享配置
## common配置
spring.cloud.nacos.config.extension-configs[0].group=common
spring.cloud.nacos.config.extension-configs[0].data-id=common.properties
spring.cloud.nacos.config.extension-configs[0].refresh=true

### 日志配置
logging.level.com.alibaba.nacos.client.config=warn
spring.main.allow-bean-definition-overriding=true

最后,我们启动springboot项目即可~

说明

注意, 从nacos读取配置, 启动业务服务后, 若修改了配置, 业务服务默认不会实时生效的!
如果, 个别配置项你需要实时的生效, 也就是无需重启业务服务就能生效, 请在项目中对应读取配置值的类上加上注解

@RefreshScope

项目地址

https://github.com/MrCoderStack/SpringBootDemo/tree/master/sb-alibaba-nacos

请关注我的订阅号

订阅号.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335