目录
温馨提示:全套教程请查看 教程总览
前提条件
需要先下载 Nacos 并启动 Nacos server。操作步骤参见 2 - 服务注册与发现组件 —— Nacos的安装
一、简介
服务发现是微服务架构体系中最关键的组件之一。如果尝试着用手动的方式来给每一个客户端来配置所有服务提供者的服务列表是一件非常困难的事,而且也不利于服务的动态扩缩容。Nacos Discovery Starter
可以帮助我们将服务自动注册到 Nacos 服务端并且能够动态感知和刷新某个服务实例的服务列表。除此之外,Nacos Discovery Starter
也将服务实例自身的一些元数据信息(例如 host、port、健康检查URL、主页等)注册到 Nacos 。
如何引入 Nacos Discovery Starter
如果要在我们的项目中使用 Nacos 来实现服务发现,使用 group ID 为 com.alibaba.cloud
和 artifact ID 为 spring-cloud-starter-alibaba-nacos-discovery
的 starter。
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
二、搭建Provider应用
1.创建项目
1.1 新建Module
1.2 引入依赖
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>
<parent>
<groupId>org.ash</groupId>
<artifactId>spring-cloud-alibaba-demo</artifactId>
<version>${revision}</version>
</parent>
<artifactId>cloud-provider</artifactId>
<description>服务提供者</description>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!-- Nacos注册中心 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<!-- 打包插件 -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
<!-- 将源码中的xml文件打包到jar中 -->
<resources>
<resource>
<directory>src/main/java</directory>
<excludes>
<exclude>**/*.java</exclude>
</excludes>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.*</include>
</includes>
</resource>
</resources>
</build>
</project>
2.添加配置文件
resources目录下新建 application.yml
配置文件,内容如下:
server:
port: 9001
spring:
application:
# 服务名称
name: cloud-provider
cloud:
nacos:
# nacos注册中心
discovery:
# 服务ip:port
server-addr: 127.0.0.1:8848
management:
endpoints:
web:
exposure:
include: "*"
Note:如果不想使用 Nacos 作为你的服务注册与发现,可以将
spring.cloud.nacos.discovery.enabled
设置为false
3.添加启动类
通过 Spring Cloud 原生注解 @EnableDiscoveryClient
开启服务注册发现功能
新建启动类 ProviderApplication.java
内容如下:
package org.ash;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
@SpringBootApplication
@EnableDiscoveryClient
public class ProviderApplication {
public static void main(String[] args) {
SpringApplication.run(ProviderApplication.class, args);
}
}
4.添加API
新建 ProviderController.java
提供一个API,内容如下:
package org.ash.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class ProviderController {
@GetMapping(value = "/provider/test/{message}")
public String test(@PathVariable String message) {
return "服务提供者:" + message;
}
}
三、运行测试
1.启动项目
控制台输出如下则表示启动成功
注意:如果启动控制台报如下错误,请检查 Nacos server 是否已启动
2.查看Nacos控制台
打开浏览器访问:http://localhost:8848/nacos
,并打开控制台 “服务管理” 下的 “服务列表” 页面,看到 cloud-provider
服务已经注册进Nacos,表示服务注册成功。
3.调用测试接口
打开浏览器调用我们之前写的测试接口 http://localhost:9001/provider/test/cloud-provider
,成功返回消息,表示调用成功。
4.服务的 EndPoint
spring-cloud-starter-alibaba-nacos-discovery
在实现的时候提供了一个EndPoint,EndPoint的访问地址为 http://ip:port/actuator/nacosdiscovery
。 EndPoint 的信息主要提供了两类:
1、subscribe: 显示了当前有哪些服务订阅者
2、NacosDiscoveryProperties: 显示了当前服务实例关于 Nacos 的基础配置
打开浏览器访问:http://localhost:9001/actuator/nacosdiscovery
,成功返回EndPoint信息
注意:
这里有个坑需要注意一下,很多教程里面说 EndPoint 的访问地址为http://ip:port/actuator/nacos-discovery
,包括Nacos官方Wiki
里面也是这样写的,但是实际调用的时候404,不确定是不是版本问题,我这边实际测试访问地址是http://localhost:9001/actuator/nacosdiscovery
,没有中间的短横杠“-”,大家注意一下。
四、关于 Nacos Starter 更多的配置项信息
更多关于 spring-cloud-starter-alibaba-nacos-discovery
的 starter 配置项如下所示:
配置项 | Key | 默认值 | 说明 |
---|---|---|---|
服务端地址 | spring.cloud.nacos.discovery.server-addr | 无 | Nacos Server 启动监听的ip地址和端口 |
服务名 | spring.cloud.nacos.discovery.service | ${spring.application.name} | 给当前的服务命名 |
服务分组 | spring.cloud.nacos.discovery.group | DEFAULT_GROUP | 设置服务所处的分组 |
权重 | spring.cloud.nacos.discovery.weight | 1 | 取值范围 1 到 100,数值越大,权重越大 |
网卡名 | spring.cloud.nacos.discovery.network-interface | 无 | 当IP未配置时,注册的IP为此网卡所对应的IP地址,如果此项也未配置,则默认取第一块网卡的地址 |
注册的IP地址 | spring.cloud.nacos.discovery.ip | 无 | 优先级最高 |
注册的端口 | spring.cloud.nacos.discovery.port | -1 | 默认情况下不用配置,会自动探测 |
命名空间 | spring.cloud.nacos.discovery.namespace | 无 | 常用场景之一是不同环境的注册的区分隔离,例如开发测试环境和生产环境的资源(如配置、服务)隔离等。 |
AccessKey | spring.cloud.nacos.discovery.access-key | 无 | 当要上阿里云时,阿里云上面的一个云账号名 |
SecretKey | spring.cloud.nacos.discovery.secret-key | 无 | 当要上阿里云时,阿里云上面的一个云账号密码 |
Metadata | spring.cloud.nacos.discovery.metadata | 无 | 使用Map格式配置,用户可以根据自己的需要自定义一些和服务相关的元数据信息 |
日志文件名 | spring.cloud.nacos.discovery.log-name | 无 | |
集群 | spring.cloud.nacos.discovery.cluster-name | DEFAULT | 配置成Nacos集群名称 |
接入点 | spring.cloud.nacos.discovery.enpoint | UTF-8 | 地域的某个服务的入口域名,通过此域名可以动态地拿到服务端地址 |
是否集成Ribbon | ribbon.nacos.enabled | true | 一般都设置成true即可 |
是否开启Nacos Watch | spring.cloud.nacos.discovery.watch.enabled | true | 可以设置成false来关闭 watch |
注册的IP地址类型 | spring.cloud.nacos.discovery.ip-type | IPv4 | 可以配置IPv4和IPv6两种类型 |
至此,服务注册与发现 —— 服务提供者搭建完成!!!
温馨提示:全套教程请查看 教程总览