Spring Cloud Alibaba 注册中心 Nacos 入门
今天我们介绍通过使用Spring Cloud Alibaba提供的Spring Cloud Alibaba Nacos Discovery 组件,基于SpringCloud编码接入Nacos作为注册中心,实现服务的注册和发现
1.Docker单节点安装Nacos
- 1.下载nacos镜像
在https://hub.docker.com/查找需要下载的docker镜像版本
docker pull nacos/nacos-server:1.4.1 // 下载指定版本
docker pull nacos/nacos-server // 下载最新版
- 2. docker启动nacos,需要配置数据库等信息IP地址不可以是localhost或者127.0.0.1
docker run -d \
-e PREFER_HOST_MODE=ip \
-e MODE=standalone \
-e SPRING_DATASOURCE_PLATFORM=mysql \
-e MYSQL_SERVICE_HOST=192.168.154.125 \
-e MYSQL_SERVICE_PORT=3306 \
-e MYSQL_SERVICE_USER=root \
-e MYSQL_SERVICE_PASSWORD=root \
-e MYSQL_SERVICE_DB_NAME=nacos_config \
-e JVM_XMS=500m \
-e JVM_XMX=500m \
-e JVM_XMN=400m \
-p 8848:8848 \
--name nacos \
nacos/nacos-server
- 3访问Nacos的UI界面 Nacos服务,内置UI前端界面,使用浏览器,输入http://192.168.154.125/nacos 使用默认的用户nacos/nacos进行登录。注:在生产环境记得修改密码 登录成功界面如下:
2.注册中心简介
注册中心是微服务构架的通信录,记录服务和服务地址的映射关系。在分布式架构中,服务会注册到这里,当服务需要调用其它服务时,就到这里找到服务的地址,进行调用。注册中心一般有三种角色,他们之间相互交互,图如下:
- Service Provider:服务提供者(或Servr)。启动时将自己的IP等信息注册到注册中心
- Service Consumer:服务消费者(或Client)。从注册中心获取提供者的信息
- Registy:注册中心
3.代码实现
我们介绍,如何搭建Nacos Discovery组件的入门示例,具体步骤如下:
- 1.搭建一个nacos-provider(作为服务提供者),注册到Nacos中
- 2.搭建一个nacos-consumer(作为服务消费者),从nacos获取nacos-provider服务实例列表,选择其中一个实例,进行远程调用。
3.1 搭建nacos-provider(服务提供者)
创建nacos-labe1-provider项目,作为服务提供者
3.1.1 为nacos-provider引入项目依赖
在项目的pom.xml文件中,引入 Spring Cloud Nacos Discovery 相关依赖。配置如下:
<properties>
<spring.boot.version>2.3.2.RELEASE</spring.boot.version>
<spring.cloud.version>Hoxton.SR8</spring.cloud.version>
<spring.cloud.alibaba.version>2.2.5.RELEASE</spring.cloud.alibaba.version>
</properties>
<!--
引入 Spring Boot、Spring Cloud、Spring Cloud Alibaba 三者 BOM 文件,进行依赖版本的管理,防止不兼容。
在 https://dwz.cn/mcLIfNKt 文章中,Spring Cloud Alibaba 开发团队推荐了三者的依赖关系
-->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>${spring.boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring.cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<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>
<!-- 引入 SpringMVC 相关依赖,并实现对其的自动配置 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 引入 Spring Cloud Alibaba Nacos Discovery 相关依赖,将 Nacos 作为注册中心,并实现对其的自动配置 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
</dependencies>
在中,我们分别引入了Spring Boot、Spring Cloud、Spring Cloud Alibaba 三者 BOM 文件,进行依赖版本的管理,防止不兼容。在《Spring Cloud 官方文档 —— 版本说明》文档中,推荐了三者的依赖关系。如下表格:
Cloud VersionCloud Alibaba VersionBoot VersionHoxton.SR82.2.5.RELEASE2.3.2.RELEASEGreenwich.SR62.1.3.RELEASE2.1.13.RELEASEHoxton.SR32.2.1.RELEASE2.2.5.RELEASEHoxton.RELEASE2.2.0.RELEASE2.2.X.RELEASEGreenwich2.1.2.RELEASE2.1.X.RELEASEFinchley2.0.3.RELEASE2.0.X.RELEASEEdgware1.5.1.RELEASE(停止维护,建议升级)1.5.X.RELEASE
我们选择了 Spring Boot 版本为 2.3.2.RELEASE引入 spring-cloud-starter-alibaba-nacos-discovery 依赖,将 Nacos 作为注册中心,并实现对它的自动配置。
3.1.2 nacos-provider的配置文件
创建nacos-provider的application.yml的配置文件,添加 Nacos Discovery 配置项。配置如下:
spring:
application:
name: nacos-provider # Spring 应用名
cloud:
nacos:
# Nacos 作为注册中心的配置项,对应 NacosDiscoveryProperties 配置类
discovery:
server-addr: 192.168.154.125:8848 # Nacos 服务器地址
service: ${spring.application.name} # 注册到 Nacos 的服务名。默认值为 ${spring.application.name}。
server:
port: 9900 # 服务器端口。默认为 8080
3.1.3 启动类添加配置以及测试
在NacosLab1ProviderApplication启动项上添加 @EnableDiscoveryClient 注解
- 1.创建ProviderController类用于提供服务
@RestController
public class ProviderController {
private Logger LOGGER = LoggerFactory.getLogger(this.getClass());
@GetMapping("hello")
public String sayhello(String consumer){
LOGGER.info("操作成功");
return "provider hello:" + consumer;
}
}
2.运行EurekaProviderApplication后,打开Nacos 控制台,可以在服务列表看到服务 nacos-provider。如下图:
3.2 搭建nacos-consumer(服务消费者)
创建nacos-labe1-consumer项目,作为服务消费者,项目代码和服务提供者是基本一致的。
3.2.1 为nacos-consumer引入项目依赖
和nacos-provider的依赖基本一致
3.2.2 nacos-consumer的配置文件
创建nacos-provider的application.yml的配置文件,添加 Nacos Discovery 配置项。配置如下:
spring:
application:
name: nacos-consumer # Spring 应用名
cloud:
nacos:
# Nacos 作为注册中心的配置项,对应 NacosDiscoveryProperties 配置类
discovery:
server-addr: 192.168.154:8848 # Nacos 服务器地址
server:
port: 9800 # 服务器端口。默认为 8080
3.2.3 启动类添加配置以及添加消费类
- 在NacosLab1ConsumerApplication添加@EnableDiscoveryClient配置
- 2.创建ConsumerRestTemplateConfiguration配置类
@Configuration
public class ConsumerRestTemplateConfiguration {
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
}
- 添加控制器
@RestController
public class ConsumerControlle {
@Autowired
private DiscoveryClient discoveryClient;
@Autowired
private RestTemplate restTemplate;
@Autowired
private LoadBalancerClient loadBalancerClient;
@GetMapping("/hello")
public String hello(String name) {
// <1> 获得服务 `eureka-provider` 的一个实例
ServiceInstance instance;
if (true) {
// 获取服务 `demo-provider` 对应的实例列表
List<ServiceInstance> clientInstances = discoveryClient.getInstances("nacos-provider");
// 选择第一个
instance = clientInstances.size() > 0 ? clientInstances.get(0) : null;
} else {
instance = loadBalancerClient.choose("nacos-provider");
}
// <2> 发起调用
if (instance == null) {
throw new IllegalStateException("获取不到实例");
}
String targetUrl = instance.getUri() + "/hello?consumer=" + name;
String response = restTemplate.getForObject(targetUrl, String.class);
// 返回结果
return "consumer:" + response;
}
}
4.3.4 测试
运行eureka-consumer后,打开Eureka运维界面,结果如图所示:
- 访问服务消费者http://127.0.0.1:9800/hello?name=consumer1,返回结果为:"consumer:provider hello:consumer1"。表示远程调用服务提供者成功
总结
今天主要讲解了Nacos注册中心、Nacos Client(消费者和服务者创建)的搭建过程。
本文暂时没有评论,来添加一个吧(●'◡'●)