为什么需要注册中心?

在分布式架构中,服务会注册到这里,当服务需要调用其它服务时,就到这里找到服务的地址,进行调用;服务管理,核心是有个服务注册表,心跳机制动态维护 ;

服务注册

创建普通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

最新文章

  1. 基于hexo+github搭建一个独立博客
  2. Java横向、纵向合并图片
  3. 关于eclipse android 在manifest改app应用包名注意事项
  4. 【easyui】--普通js中获取easyui中分页信息(page,pageSize等)
  5. 手机NFC通信的安全车钥匙
  6. &lt;php&gt;对文件的目录、属性、路径的操作
  7. ORA-01157报错&quot;cannot identify/lock data file&quot;解决
  8. [Leetcode][Python]20: Valid Parentheses
  9. HDU 1251 统计难题 (字符串-Trie树)
  10. 【转】10款GitHub上最火爆的国产开源项目
  11. PyCharm(python的开发工具)的安装与破解
  12. Ext中 grid 设置行样式
  13. 新萌渗透测试入门DVWA 教程2:DWVA 的配置和暴力破解靶机
  14. visual studio 2013 下ef6 CodeFirst 使用SQL Lite 数据库
  15. Ionic学习资源
  16. prayer OJ M
  17. keras+theano+tensorflow+darknet
  18. cout的输出格式初探3
  19. 【Java】Collection与Map接口总结
  20. 洛谷——P1068 分数线划定

热门文章

  1. CSS001. 纯CSS实现瀑布流(纵向排序)
  2. bean.xml配置数据源和读取配置文件配置数据源
  3. Elasticsearch的基本使用
  4. 【OWASP TOP10】2021年常见web安全漏洞TOP10排行
  5. tp5 引入 没有命名空间的类库的方法(以微信支付SDK为例)
  6. Linux下Nodejs安装(完整详细)转
  7. 3gcms-Flash幻灯片上传后图片模糊解决办法
  8. Python - 生成requirement.text 文件
  9. &#129498;‍♂️全套Java教程_Java基础入门教程,零基础小白自学Java必备教程&#128104;‍&#128187;004 # 第四单元 流程控制语句上 #
  10. P4351-[CERC2015]Frightful Formula【组合数学,MTT】