微服务注册中心-Nacos的简单使用
2022-01-09 本文已影响0人
侧耳倾听y
服务注册
- 添加Nacos依赖
在顶层pom文件先定义所要使用的 Spring Cloud 和 Spring Cloud Alibaba 的版本。
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>2020.0.1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2021.1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
在子模块加入Nacos依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
添加完依赖项之后,就可以通过配置项开启 Nacos 的服务治理功能了。Nacos 通过自动装配流程(auto configuration)加载配置项并开启服务注册。
- 添加配置
spring:
cloud:
nacos:
discovery:
# Nacos的服务注册地址,可以配置多个,逗号分隔
server-addr: localhost:8848
# 服务注册到Nacos上的名称,一般不用配置
service: coupon-customer-serv
# nacos客户端向服务端发送心跳的时间间隔,时间单位其实是ms
heart-beat-interval: 5000
# 服务端没有接受到客户端心跳请求就将其设为不健康的时间间隔,默认为15s
# 注:推荐值该值为15s即可,如果有的业务线希望服务下线或者出故障时希望尽快被发现,可以适当减少该值
heart-beat-timeout: 20000
# 元数据部分 - 可以自己随便定制
metadata:
mydata: abc
# 客户端在启动时是否读取本地配置项(一个文件)来获取服务列表
# 注:推荐该值为false,若改成true。则客户端会在本地的一个
# 文件中保存服务信息,当下次宕机启动时,会优先读取本地的配置对外提供服务。
naming-load-cache-at-start: false
# 命名空间ID,Nacos通过不同的命名空间来区分不同的环境,进行数据隔离,
namespace: dev
# 创建不同的集群
cluster-name: Cluster-A
# [注意]两个服务如果存在上下游调用关系,必须配置相同的group才能发起访问
group: myGroup
# 向注册中心注册服务,默认为true
# 如果只消费服务,不作为服务提供方,倒是可以设置成false,减少开销
register-enabled: true
- 验证
启动服务,登录nacos,查看服务列表
服务发现
- 添加依赖
<!-- Nacos服务发现组件 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- 负载均衡组件 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
<!-- webflux服务调用 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
- 添加配置
与服务注册中配置一样
- 添加 WebClient 对象
@Bean
@LoadBalanced
public WebClient.Builder register() {
return WebClient.builder();
}
- 使用 WebClient 发起远程方法调用
@Autowired
private WebClient.Builder webClientBuilder;
T t = webClientBuilder.build()
.get()
.uri("url?param=" + param)
.retrieve()
.bodyToMono(T.class)
.block();
get:指明了 Http Method 是 GET,如果是其他请求类型则使用对应的 post、put、patch、delete 等方法;
uri:指定了访问的请求地址;
retrieve + bodyToMono:指定了 Response 的返回格式;
block:发起一个阻塞调用,在远程服务没有响应之前,当前线程处于阻塞状态。