一、SpringCloud Alibaba Nacos 介绍
Nacos 为 SpringCloud Alibaba 下的一款集 服务注册与发现、服务配置管理于一体的微服务管理平台。
其中在服务管理中处了服务的注册与发现基本功能外还实现了服务调用的负载均衡以及服务的健康监控。服务配置管理相比SpringCloud Config 的配置操作简单,达到了修改即生效效果。
Nacos 基本架构图及领域模型图
Nacos 也是分为服务端和客户端,服务端即Nacos管理平台应用服务,微服务应用通过接入到Nacos服务端中,通过服务端控制台页面可以进行服务管理以及配置管理。客户端即我们的需要接入的微服务工程,通过引入Nacos相应的依赖(服务注册发现依赖,或者配置中心管理依赖)以及其他配置接入到服务端,来实现通过Nacos进行服务配置管理。
领域模型,即我们在使用Nacos配置中心或服务注册管理时的一个概念,我们在确定一个唯一的配置键值对时,需要确定其命名空间(NameSpace)和命名空间下的某分组信息(Group),以及分组下的配置文件(Service/DataId),明确该三项后即可确定该键值对从哪里进行读取。命名空间通常用来区分不同环境如开发、测试、生产,分组用来对服务进行分组,每个分组下的服务Service 肯能有多个中心,比如上海中心、西安中心(可通过配置区分),每个service可以有多个服务实例instance;
二、Nacos 服务端搭建
windows 端搭建:
1,启动安装文件nacos-server-1.2.1.zip下载
下载地址:https://github.com/alibaba/nacos/tags ,选择具体版本后,点击zip 文件进行下载
2,下载后进行解压 ,并启动
3,访问登陆
nacos 默认端口 8848 ,访问地址 http://127.0.0.1:8848/nacos 默认账户密码 nacos/nacos
2,linux端搭建:
参见《Alibaba Nacos Linux下的集群安装与mysql持久化数据》
三、服务提供者端接入Nacos 服务注册中心
环境:SpringBoot 2.2.2.RELEASE + SpringCloud Hoxton.SR1 + SpringCloud Alibaba 2.1.0.RELEASE
主要步骤:
- 创建工程,引入依赖
- 编写配置文件
- 编写主启动类
- 编写业务代码
1,创建 product_service_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">
<parent>
<groupId>com.xiaohui.springCloud</groupId>
<artifactId>SpringCloud</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>product_service_nacos</artifactId>
<dependencies>
<!-- 公共模块 -->
<dependency>
<groupId>com.xiaohui.springCloud</groupId>
<artifactId>cloud-api-common</artifactId>
<version>${project.version}</version>
</dependency>
<!-- SpringCloud Alibaba nacos 主要 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- web 依赖开始 -->
<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>
<!-- web 依赖结束 -->
<!-- 数据库层相关依赖 开始 -->
省略。。。
<!-- 数据库层相关依赖 结束 -->
<!-- 热部署依赖 -->
<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>
2,创建配置文件application.yml
server:
port: 8001 #服务端口
spring:
application:
name: nacos-payment-service #服务名称
cloud:
nacos:
discovery:
server_addr: 127.0.0.1:8848 #配置nacos地址
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: org.gjt.mm.mysql.Driver
url: jdbc:mysql://192.168.17.132:3306/springcloud?characterEncoding=UTF-8
username: root
password: root
management:
endpoints:
web:
exposure:
include: '*'
logging:
level:
root: INFO
mybatis:
mapperLocations: classpath:mapper/*.xml
type-aliases-package: com.xiaohui.springcloud.entities
其中比较重要的配置部分:
spring.cloud.nacos.discovery.server_addr 指定Nacos的注册服务地址
management.endpoints.web.exposure.include 进行暴露监控端点
3,编写主启动类
package com.xiaohui.springcloud;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
@SpringBootApplication
@EnableDiscoveryClient
public class ProductApplication {
public static void main(String[] args) {
SpringApplication.run(ProductApplication.class,args);
}
}
注意需要给主启动类添加@EnableDiscoveryClient 启动服务发现功能
4,编写业务代码
package com.xiaohui.springcloud.controller;
import com.xiaohui.springcloud.entities.CommonResult;
import com.xiaohui.springcloud.entities.Payment;
import com.xiaohui.springcloud.service.IPaymentService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;
import java.util.concurrent.TimeUnit;
@RestController
@Slf4j
public class PaymentController {
@Autowired
IPaymentService paymentService;
@Value("${spring.cloud.client.ip-address}")
private String ip;
@Value("${server.port}")
private String port;
@GetMapping("/payment/get/{id}")
public CommonResult getPaymentById(@PathVariable("id") Long id){
Payment payment = paymentService.getPaymentById(id);
log.info(payment.toString());
if(payment != null){
return new CommonResult(0,"查询成功 server node:"+ip+":"+port,payment);
}else{
return new CommonResult(-9999,"查询失败,不存在信息 server node:"+ip+":"+port,null);
}
}
}
5,启动测试
启动Nacos 服务后,再启动服务该提供者工程,我们在服务列表下的默认public命名空间,默认分组DEFAULT_GROUP下可以看到该微服务已经注册进来