Spring Cloud Alibaba 使用Nacos作为服务注册中心
为什么需要注册中心?
在分布式架构中,服务会注册到这里,当服务需要调用其它服务时,就到这里找到服务的地址,进行调用;服务管理,核心是有个服务注册表,心跳机制动态维护 ;
服务注册
创建普通SpringBoot工程(spring-cloud-alibaba-service-user)该工程当前用于使用Nacos进行服务注册。
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.gitee</groupId>
<artifactId>spring-cloud-alibaba-service-user</artifactId>
<version>0.0.1</version>
<dependencyManagement>
<dependencies>
<!-- 依赖管理父工程 -->
<dependency>
<groupId>com.gitee</groupId>
<artifactId>spring-cloud-alibaba-version-parent</artifactId>
<version>${project.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<!-- 公共模块 -->
<dependency>
<groupId>com.gitee</groupId>
<artifactId>spring-cloud-alibaba-common</artifactId>
<version>${project.version}</version>
</dependency>
<!-- web服务 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- undertow服务器 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-undertow</artifactId>
</dependency>
<!-- 参数校验 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
<!-- 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>
<!-- openfeign 服务发现调用 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
</dependencies>
</project>
application.yaml
server:
port: 8080
spring:
application:
name: service-user
cloud:
nacos:
discovery:
#注册中心地址
server-addr: localhost:8848
#服务元数据
metadata:
version: 0.0.1
appname: ${spring.application.name}
UserServiceApplication.java
/**
* 用户中心服务启动类
*
* @author wentao.wu
*/
@EnableDiscoveryClient//服务注册
@SpringBootApplication
public class UserServiceApplication {
public static void main(String[] args) {
SpringApplication.run(UserServiceApplication.class, args);
}
}
HelloWorldController.java
/**
* HelloWorld Web
*
* @author wentao.wu
*/
@RequestMapping(value = "/hello/")
@RestController
public class HelloWorldController {
@GetMapping("/say/{name}")
public Response<String> say(@PathVariable("name") String name) {
Response<String> response = new Response<>();
response.setCode("1");
response.setMsg("你好啊," + name + "!");
return response;
}
}
以上内容是整个工程当前的内容,直接运行访问:http://localhost:8080/hello/say/nacos,后者输出:
{
"code": "1",
"msg": "你好啊,nacos!",
"errorCode": null,
"errorMsg": null,
"result": null
}
看到以上返回内容代表整个服务完全启动成功。进入nacos管理界面:http://localhost:8848/nacos 默认登录账号与密码为 nacos/nacos
进入服务管理菜单->服务列表就能够看到我们注册进去的服务。

点击详情即可查看服务元数据:

从Nacos之中服务列表能够看到我们所注册的服务意味这服务已经注册到Nacos Server端。
多环境服务隔离
用于进行租户粒度的配置隔离。不同的命名空间下,可以存在相同的 Group 或 Data ID 的配置。Namespace 的常用场景之一是不同环境的配置的区分隔离,例如开发测试环境和生产环境的资源(如配置、服务)隔离等。
在资源不够的情况下,开发环境(dev),综合测试环境(sit),业务测试环境(uat)通常会公用一套Nacos Server,使用Namespace 来区分环境,然后再通过dataID来指定每个服务的配置文件,这样就可以每个环境的服务注册发现不会相互干扰,并且也不会用到其他环境的配置文件。
创建命名空间
从Nacos菜单中命名空间点击新建命名空间,输入空间名称与描述,命名空间ID可填可不填,不填则会自动生成一串UUID的字符。


记录自动生成的命名空间ID:7e3699fa-09eb-4d47-8967-60f6c98da94a
工程使用对应的命名空间
application.yaml
server:
port: 8080
spring:
application:
name: service-user
cloud:
nacos:
discovery:
server-addr: localhost:8848
metadata:
version: 0.0.1
appname: ${spring.application.name}
#指定命名空间 对应dev环境
namespace: 7e3699fa-09eb-4d47-8967-60f6c98da94a
#指定分组 案例组
group: EXAMPLE-GROUP
#指定集群环境 华南
cluster-name: HuaNan
这里添加了3个配置。
Namespace:使用dev环境的命名空间id指定该服务部署在dev环境下与其他命名空间服务进行隔离。
Group: 标识该服务属于哪个项目组。
Cluster-name:标识该服务部署在华南地区。
Nacos Server最终由namespace->group->ServiceID->Cluster-name获取到对应的服务实例列表。
配置好之后运行UserServiceApplication.java对服务进行重启,重启之后服务将重新注册到Nacos中并且在Web界面服务列表中Dev命名空间进行显示。


注意事项
Namespace与Group配置后只有Namespace与Group相同的才能够算作一套系统,只有同一套系统才能够内部进行快速访问,如使用feign进行远程调用时,GROUP=金融系统与GROUP=电商系统两个不同的GROUP在其中是不能够直接通过Feign服务发现进行访问的,对应的业务服务只会发现对应Namespace与Group中的服务。
源码代码存放地址
gitee: https://gitee.com/SimpleWu/spring-cloud-alibaba-example.git
cnblogs: https://www.cnblogs.com/SimpleWu
持续更新目录:https://www.cnblogs.com/SimpleWu/p/15476427.html
Spring Cloud Alibaba 使用Nacos作为服务注册中心的更多相关文章
- Spring Cloud Alibaba 整合 Nacos 实现服务配置中心
在之前的文章 <Nacos 本地单机版部署步骤和使用> 中,大家应该了解了 Nacos 是什么?其中 Nacos 提供了动态配置服务功能 一.Nacos 动态配置服务是什么? 官方是这么说 ...
- Spring Cloud Eureka 分布式开发之服务注册中心、负载均衡、声明式服务调用实现
介绍 本示例主要介绍 Spring Cloud 系列中的 Eureka,使你能快速上手负载均衡.声明式服务.服务注册中心等 Eureka Server Eureka 是 Netflix 的子模块,它是 ...
- Spring Cloud(一):服务注册中心Eureka
Spring Cloud 基于 Netflix 的几个开源项目进行了封装,提供包括服务注册与发现(Eureka),智能路由(Zuul),熔断器(Hystrix),客户端负载均衡(Ribbon)等在内的 ...
- Spring Cloud Eureka 4 (高可用服务注册中心)
在微服务这样的分布式环境中,我们需要充分考虑发生故障的情况,所以在生产环境中必须考虑对各个组件进行高可用部署,对于服务注册中心也是一样. Eureka Server 的高可用实际上就是讲自己作为服务向 ...
- Spring Cloud Alibaba(4)---Nacos(注册中心)
Nacos(注册中心) 有关Spring Cloud Alibaba之前写过三篇文章. Spring Cloud Alibaba(1)---入门篇 Spring Cloud Alibaba(2)--- ...
- Spring Cloud Alibaba(2)---Nacos概述
Spring Cloud Alibaba(2)---nacos概述 上一篇博客讲了有关 SpringCloudAlibaba的概述,这篇开始讲SpringCloudAlibaba组件之一---Naco ...
- Spring Cloud Alibaba(5)---Nacos(配置中心)
Nacos(配置中心) 有关Spring Cloud Alibaba之前写过四篇文章,这篇也是在上面项目的基础上进行开发. Spring Cloud Alibaba(1)---入门篇 Spring C ...
- Spring Cloud Alibaba(6)---Nacos持久化Mysql8.0版本
Nacos持久化Mysql8.0版本 有关Nacos之前写过三篇文章. Spring Cloud Alibaba(3)---Nacos概述 Spring Cloud Alibaba(4)---Naco ...
- Spring Cloud Alibaba(3)---Nacos概述
Spring Cloud Alibaba(3)---nacos概述 上一篇博客讲了有关 SpringCloudAlibaba的概述,这篇开始讲SpringCloudAlibaba组件之一---Naco ...
随机推荐
- bean的作用域和生命周期
一.Bean作用域 二.生命周期 其中,这个类实现各种接口重写各种方法,会按bean的声明周期按序执行: 其中,自定义的初始化和自定义销毁的方法不是实现接口重写,而是成员方法,并且在装配bean即在x ...
- Tomcat配置支持war包部署
Tomcat配置支持war包部署 #cat /data/tomcat/conf/server.xml <?xml version='1.0' encoding='utf-8'?> < ...
- grep、cut、awk、sed的使用
grep.cut.awk.sed 常常应用在查找日志.数据.输出结果等等,并对我们想要的数据进行提取.通常grep,sed命令是对行进行提取,cut跟awk是对列进行提取 处理海量数据之grep命令 ...
- 论文解读(BYOL)《Bootstrap Your Own Latent A New Approach to Self-Supervised Learning》
论文标题:Bootstrap Your Own Latent A New Approach to Self-Supervised Learning 论文方向:图像领域 论文来源:NIPS2020 论文 ...
- 第一次用AngularJS
1.创建指令的4种方式(ECMA) var appModule = angular.module('app', []); appModule.directive('hello', function() ...
- html2canvas实现截取指定区域或iframe的区域
官网文档: http://html2canvas.hertzen.com/ 使用的是 jquery 3.2.1 html2canvas 1.0.0-rc.7 截取根据id的指定区域: var ca ...
- Java基础系列(20)- while循环
循环结构 while循环 do-循环 for循环 在java5中引入了一种主要用于数组的增强型for循环 while循环 while是最基本的循环,它的结构为 while(布尔表达式){ //循环内容 ...
- 05-IdentityServer4
前面我们认识了jwt的token颁发模式,其中的应用场景和部分缺陷已经很是了解了.有些场合并不适合jwt,特别是针对第三方进行使用时,比如我们使用qq或者微信登陆博客园或其他第三方应用时. Ids4的 ...
- windows下将Anaconda移位置(C盘转移至D盘)
1.首先说明一下我的安装情况: (1)Window10系统 (2)Anaconda安装在C盘 2.由于Anaconda安装在C盘经常会涉及权限问题,在安装torch的时候让我萌发了转移磁盘的想法(拒绝 ...
- 羽夏闲谈——VSCode 配置 C/C++环境
前言 VSCode是微软发布一款跨平台的源代码编辑器,其拥有强大的功能和丰富的扩展,使之能适合编写许多语言.我的环境是64位Win10,如果是其他系统请自行判断调整.本人根据网上的配置方法在结合本 ...