200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > SpringCloud Alibaba Nacos 服务注册与配置中心

SpringCloud Alibaba Nacos 服务注册与配置中心

时间:2018-09-28 22:07:42

相关推荐

SpringCloud Alibaba Nacos 服务注册与配置中心

SpringCloud Alibaba Nacos 服务注册与配置中心

1-SpringCloud Alibaba Nacos 概述1.1-是什么1.2-能干嘛1.3-去哪下1.4-怎么玩 2-SpringCloud Alibaba Nacos 安装2.1-Nacos 下载2.2-Nacos 安装 3-SpringCloud Alibaba Nacos 注册中心3.1-提供者 cloudalibaba-provider-payment90013.2-消费者 cloudalibaba-consumer-nacos-order833.3-注册中心对比 4-SpringCloud Alibaba Nacos 配置中心4.1-Nacos 基础配置4.2-Nacos 分类配置 5-SpringCloud Alibaba Nacos 集群和持久化5.1-持久化配置5.2-持久化配置

1-SpringCloud Alibaba Nacos 概述

1.1-是什么

Nacos(Dynamic Naming And Configuration Service):Na、co 分别是 Naming、Configuration 的前两个字母,最后的 s 是 Service 的首字母。

一个更易于构建云原生应用的动态服务发现、配置管理、服务管理中心

Nacos 就是注册中心 + 配置中心的组合。等价于:Nacos = Eureka + Config + Bus

1.2-能干嘛

服务注册中心代替 Eureka。

服务配置中心代替 Config。

1.3-去哪下

官网

https://nacos.io/zh-cn/index.html

GitHub

/alibaba/Nacos

1.4-怎么玩

2-SpringCloud Alibaba Nacos 安装

2.1-Nacos 下载

GitHub

/alibaba/nacos/releases/tag/1.1.4

网盘:

链接:/s/1bVwYAtbZpT1MHJAVOaMKCg提取码:1104

2.2-Nacos 安装

a、解压 Nacos 压缩包(nacos-server-1.1.4.zip)

b、运行 nacos/bin 目录下 startup.cmd

c、http://localhost:8848/nacos

默认账户、密码都是 nacos

3-SpringCloud Alibaba Nacos 注册中心

https://spring-cloud-alibaba-group.github.io/github-pages/greenwich/spring-cloud-alibaba.html

3.1-提供者 cloudalibaba-provider-payment9001

a、右击父工程 mscloud,新建子模块 cloudalibaba-provider-payment9001

b、修改父工程 mscloud 中 pom.xml

待处理–是否需要修改

c、修改子模块 cloudalibaba-provider-payment9001 中 pom.xml

<?xml version="1.0" encoding="UTF-8"?><project xmlns="/POM/4.0.0"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/POM/4.0.0 /xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><artifactId>cloud</artifactId><groupId>com.atguigu.springcloud</groupId><version>1.0-SNAPSHOT</version></parent><artifactId>cloudalibaba-provider-payment9001</artifactId><dependencies><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope><optional>true</optional></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.62</version></dependency></dependencies></project>

d、修改子模块 cloudalibaba-provider-payment9001,目录 /src/main/resources 中新建 application.yml

server:port: 9001spring:application:name: nacos-payment-providercloud:nacos:discovery:# Nacos 地址server-addr: localhost:8848management:endpoints:web:exposure:include: '*'

e、修改子模块 cloudalibaba-provider-payment9001,目录 /src/main/java 中新建包 com.atguigu.springcloud.alibaba

f、修改子模块 cloudalibaba-provider-payment9001,包 com.atguigu.springcloud.alibaba 中新建启动类 PaymentMain9001.java

package com.atguigu.springcloud.alibaba;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cloud.client.discovery.EnableDiscoveryClient;@EnableDiscoveryClient@SpringBootApplicationpublic class PaymentMain9001 {public static void main(String[] args) {SpringApplication.run(PaymentMain9001.class, args);}}

g、修改子模块 cloudalibaba-provider-payment9001,目录 /src/main/java 中新建包 com.atguigu.springcloud.alibaba.controller

h、修改子模块 cloudalibaba-provider-payment9001,包 com.atguigu.springcloud.alibaba.controller 中新建 PaymentController.java

package com.atguigu.springcloud.alibaba.controller;import org.springframework.beans.factory.annotation.Value;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.PathVariable;import org.springframework.web.bind.annotation.RestController;@RestControllerpublic class PaymentController {@Value("${server.port}")private String serverPort;@GetMapping(value = "/payment/nacos/{id}")public String getPayment(@PathVariable("id") Integer id) {return "nacos registry, serverPort: " + serverPort + "\t id" + id;}}

i、测试子模块 cloudalibaba-provider-payment9001

启动子模块 cloudalibaba-provider-payment9001http://localhost:8848/nacos

http://localhost:9001/payment/nacos/1

3.2-消费者 cloudalibaba-consumer-nacos-order83

a、右击父工程 mscloud,新建子模块 cloudalibaba-consumer-nacos-order83

b、修改子模块 cloudalibaba-consumer-nacos-order83 中 pom.xml

Why Nacos 支持负载均衡。

<?xml version="1.0" encoding="UTF-8"?><project xmlns="/POM/4.0.0"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/POM/4.0.0 /xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><artifactId>cloud</artifactId><groupId>com.atguigu.springcloud</groupId><version>1.0-SNAPSHOT</version></parent><artifactId>cloudalibaba-consumer-nacos-order83</artifactId><dependencies><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><dependency><groupId>com.atguigu.springcloud</groupId><artifactId>cloud-api-commons</artifactId><version>${project.version}</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope><optional>true</optional></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies></project>

c、修改子模块 cloudalibaba-consumer-nacos-order83,目录 /src/main/resources 中新建 application.yml

server:port: 83spring:application:name: nacos-order-consumercloud:nacos:discovery:server-addr: localhost:8848service-url:nacos-user-service: http://nacos-payment-provider

d、修改子模块 cloudalibaba-consumer-nacos-order83,目录 /src/main/java 中新建包 com.atguigu.springcloud.alibaba

e、修改子模块 cloudalibaba-consumer-nacos-order83,包 com.atguigu.springcloud.alibaba 中新建启动类 OrderNacosMain83.java

package com.atguigu.springcloud.alibaba;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cloud.client.discovery.EnableDiscoveryClient;@EnableDiscoveryClient@SpringBootApplicationpublic class OrderNacosMain83 {public static void main(String[] args) {SpringApplication.run(OrderNacosMain83.class, args);}}

f、修改子模块 cloudalibaba-consumer-nacos-order83,目录 /src/main/java 中新建包 com.atguigu.springcloud.alibaba.config

g、修改子模块 cloudalibaba-consumer-nacos-order83,包 com.atguigu.springcloud.alibaba.config 中新建 ApplicationContextConfig.java

package com.atguigu.springcloud.alibaba.config;import org.springframework.cloud.client.loadbalancer.LoadBalanced;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.web.client.RestTemplate;@Configurationpublic class ApplicationContextConfig {@Bean@LoadBalancedpublic RestTemplate getRestTemplate() {return new RestTemplate();}}

h、修改子模块 cloudalibaba-consumer-nacos-order83,目录 /src/main/java 中新建包 com.atguigu.springcloud.alibaba.controller

i、修改子模块 cloudalibaba-consumer-nacos-order83,包 com.atguigu.springcloud.alibaba.controller 中新建 OrderNacosController.java

package com.atguigu.springcloud.alibaba.controller;import lombok.extern.slf4j.Slf4j;import org.springframework.beans.factory.annotation.Value;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.PathVariable;import org.springframework.web.bind.annotation.RestController;import org.springframework.web.client.RestTemplate;import javax.annotation.Resource;@RestController@Slf4jpublic class OrderNacosController {@Resourceprivate RestTemplate restTemplate;@Value("${service-url.nacos-user-service}")private String serverURL;@GetMapping(value = "/consumer/payment/nacos/{id}")public String paymentInfo(@PathVariable("id") Long id) {return restTemplate.getForObject(serverURL + "/payment/nacos/" + id, String.class);}}

j、测试子模块 cloudalibaba-provider-payment9001

启动子模块 cloudalibaba-provider-payment9001启动子模块 cloudalibaba-consumer-nacos-order83http://localhost:8848/nacoshttp://localhost:83/consumer/payment/nacos/13

3.3-注册中心对比

Nacos 全景图:

Nacos 和 CAP:

Nacos 支持 AP 和 CP 模式的切换:

C 是所有节点在同一时间看到的数据是一致的,而 A 是所有的请求都会收到响应。

如何选择模式?

如果不需要存储服务级别的信息且服务实例是通过 nacos-client 注册,并能够保持心跳上报,那么就可以选择 AP 模式。当前主流的服务如 SpingCloud 和 Dubbo 服务都适用于 AP 模式,AP 模式为了服务的可能性而减弱了一致性,因此 AP 模式下只支持注册临时实例。如果需要在服务级别编辑或者存储配置信息,那么 CP 是必须,K8S 服务和 DNS 服务则适用于 CP 模式。CP 模式下则支持注册持久化实例,此时则是以 Raft 协议为集群运行模式,该模式下注册实例之前必须先注册服务,如果服务不存在,则会返回错误。

4-SpringCloud Alibaba Nacos 配置中心

4.1-Nacos 基础配置

a、右击父工程 mscloud,新建子模块 cloudalibaba-config-nacos-client3377

b、修改子模块 cloudalibaba-config-nacos-client3377 中 pom.xml

<?xml version="1.0" encoding="UTF-8"?><project xmlns="/POM/4.0.0"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/POM/4.0.0 /xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><artifactId>cloud</artifactId><groupId>com.atguigu.springcloud</groupId><version>1.0-SNAPSHOT</version></parent><artifactId>cloudalibaba-config-nacos-client3377</artifactId><dependencies><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope><optional>true</optional></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies></project>

c、修改子模块 cloudalibaba-config-nacos-client3377,目录 /src/main/resources 中新建 bootstrap.yml

Nacos 和 SpringCloud Config 一样,在项目初始化时保证先从配置中心进行配置拉取之后,才能保证项目的正常启动。SpringBoot 中配置文件的加载是存在优先级顺序的,bootstrap 优先级高于 application。

server:port: 3377spring:application:name: nacos-config-clientcloud:nacos:discovery:# 注册中心地址server-addr: localhost:8848config:# 配置中心地址server-addr: localhost:8848# yaml 格式的配置file-extension: yaml

d、修改子模块 cloudalibaba-config-nacos-client3377,目录 /src/main/resources 中新建 application.yml

spring:profiles:active: dev

e、修改子模块 cloudalibaba-config-nacos-client3377,目录 /src/main/java 中新建包 com.atguigu.springcloud.alibaba

f、修改子模块 cloudalibaba-config-nacos-client3377,包 com.atguigu.springcloud.alibaba 中新建启动类 NacosConfigClientMain3377.java

package com.atguigu.springcloud.alibaba;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cloud.client.discovery.EnableDiscoveryClient;@EnableDiscoveryClient@SpringBootApplicationpublic class NacosConfigClientMain3377 {public static void main(String[] args) {SpringApplication.run(NacosConfigClientMain3377.class, args);}}

g、修改子模块 cloudalibaba-config-nacos-client3377,目录 /src/main/java 中新建包 com.atguigu.springcloud.alibaba.controller

h、修改子模块 cloudalibaba-config-nacos-client3377,包 com.atguigu.springcloud.alibaba.controller 中新建 ConfigClientController.java

通过 SpringCloud 原生注解@RefreshScope 实现配置自动更新

package com.atguigu.springcloud.alibaba.controller;import org.springframework.beans.factory.annotation.Value;import org.springframework.cloud.context.config.annotation.RefreshScope;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RestController;@RestController@RefreshScopepublic class ConfigClientController {@Value("${config.info}")private String configInfo;@GetMapping("/config/info")public String getConfigInfo() {return configInfo;}}

i、Nacos 中添加配置信息

Nacos 的匹配规则:

https://nacos.io/zh-cn/docs/quick-start-spring-cloud.html

Nacos 中 DataId 的组成格式与 SpringBoot 配置文件中的匹配规则:

${spring.application.name}-${spring.profiles.active}.$(spring.cloud.nacos.config.file-extension

Nacos 配置新增:

DataId 设置:

# prefix:默认 spring.application.name# spring.profile.active:当前环境对应的 profile,可以通过 spring.profile.active 配置# file-exetension:配置内容的数据格式,可以通过 spring.cloud.nacos.config.file-extension 配置${spring.application.name}-${spring.profile.active}.${spring.cloud.nacos.config.file-extension}

j、测试 Nacos 基础配置

List item启动子模块 cloudalibaba-config-nacos-client3377http://localhost:3377/config/info

历史配置

测试

启动前需要在nacos客户端-配置管理-配置管理栏目下有没有对应的yaml配置文件

运行cloud-config-nacos-client3377的主启动类

调用接口查看配置信息

http://localhost:3377/config/info

自带动态刷新

修改下Nacos中的yaml配置文件,再次调用查看配置的接口,就会发现配置已经刷新

4.2-Nacos 分类配置

Nacos作为配置中心-分类配置问题多环境多项目管理Nacos的图形化管理界面配置管理命名空间Namespace+Group+Data ID三者关系?为什么这么设计?CaseDataID方案指定spring.profile.active和配置文件的DataID来使不同环境下读取不同的配置默认空间+默认分组+新建dev和test两个DataID新建dev配置DataID新建test配置DataID通过spring.profile.active属性就能进行多环境下配置文件的读取测试http://localhost:3377/config/info配置是什么就加载什么testGroup方案通过Group实现环境区分新建Group在nacos图形界面控制台上面新建配置文件DataIDbootstrap+application在config下增加一条group的配置即可。可配置为DEV_GROUP或TEST_GROUPNamespace方案新建dev/test的Namespace回到服务管理-服务列表查看按照域名配置填写YMLbootstrapapplication

5-SpringCloud Alibaba Nacos 集群和持久化

Nacos集群和持久化配置(重要)

官网说明

https://nacos.io/zh-cn/docs/cluster-mode-quick-start.html

官网架构图(写的(┬_┬))

上图官网翻译,真实情况

说明

按照上述,我们需要mysql数据库

官网说明

https://nacos.io/zh-cn/docs/deployment.html

重点说明

5.1-持久化配置

Nacos持久化配置解释Nacos默认自带的是嵌入式数据库derby/alibaba/nacos/blob/develop/config/pom.xmlderby到mysql切换配置步骤nacos-server-1.1.4\nacos\conf目录下找到sql脚本nacos-mysql.sql执行脚本nacos-server-1.1.4\nacos\conf目录下找到application.properties启动nacos,可以看到是个全新的空记录界面,以前是记录进derby

5.2-持久化配置

Linux版Nacos+MySQL生产环境配置预计需要,1个nginx+3个nacos注册中心+1个mysqlNacos下载linux版本/alibaba/nacos/releases/tag/1.1.4nacos-server-1.1.4.tar.gz解压后安装集群配置步骤(重点)1.Linux服务器上mysql数据库配置SQL脚本在哪里sql语句源文件nacos-mysql.sql自己Linux机器上的Mysql数据库黏贴执行后结果2.application.properties配置位置内容3.Linux服务器上nacos的集群配置cluster.conf梳理出3台nacos机器的不同服务端口号复制出cluster.conf内容这个IP不能写127.0.0.1,必须是Linux命令hostname -i能够识别的IP4.编辑Nacos的启动脚本startup.sh,使它能够接受不同的启动端/mynacos/nacos/bin目录下有startup.sh在什么地方,修改什么,怎么修改思考修改内容执行方式5.Nginx的配置,由它作为负载均衡器修改nginx的配置文件nginx.conf按照指定启动6.截止到此处,1个Nginx+3个nacos注册中心+1个mysql测试通过nginx访问nacoshttps://写你自己虚拟机的ip:1111/nacos/#/login新建一个配置测试linux服务器的mysql插入一条记录测试微服务cloudalibaba-provider-payment9002启动注册进nacos集群yml结果高可用小总结

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。