cmd启动nacos
startup.cmd -m standalone //单节点服务器实例
微服务中注册nacos
首先父工程中指定 springcloudalibaba 的版本
<!--nacos版本管理--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-alibaba-dependencies</artifactId> <version>2.2.5.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency>
微服务中加入nacos依赖, 同时注释掉eureka的依赖
<!-- Nacos Discovery 用于服务发现 --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency>
yml中连接到nacos
spring: datasource: url: jdbc:mysql://localhost:3306/cloud_user?useSSL=false username: root password: 123456 driver-class-name: com.mysql.jdbc.Driver application: name: userservice #user服务 cloud: nacos: server-addr: localhost:8848 #nacos服务地址
配置集群: yml文件中修改nacos的cluster-name
cloud: nacos: server-addr: localhost:8848 #nacos服务地址 discovery: cluster-name: SH #集群名: 杭州
远程调用
远程调用仍然需要RestTemplate
/**
* 创建RestTemplate并注入Spring容器
*/
@Bean
@LoadBalanced
public RestTemplate restTemplate() {
return new RestTemplate();
}
//请求示例
String url = "http://userservice/user/" + userId;//构建url 让temple访问
User user = restTemplate.getForObject(url, User.class);//使用restTemplate发送请求
负载算法
- 首先RestTemplate仍然需要 @LoadBalanced
然后设置优先同集群访问(首先应确保存在同集群服务器)
userservice: ribbon: NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule # Nacos 同集群调用策略
namespace
不同namespace下的服务无法相互调用
(非)临时实例
cloud:
nacos:
server-addr: localhost:8848 # nacos服务地址
discovery:
cluster-name: HZ # 集群名称
namespace: 2741507c-3068-4304-8fe7-519f47a6b77b # 设置namespace
service:
# 设置为非临时实例
ephemeral: false
添加nacos配置
nacos远程配置依赖
<!--Nacos配置管理--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency>
- resource下创建 bootstrap.yml :
一定要指定 name , active , server-addr , file-extension(后缀名)
spring:
application:
name: userservice
profiles:
active: dev # 环境
cloud:
nacos:
server-addr: localhost:8848 # nacos地址
config:
file-extension: yaml #配置文件后缀名
nocos网页配置:
命名规则
userservice-dev.yaml //测试环境配置 userservice.yaml //通用配置
内容
pattern: dateformat: yyyy/MM/dd日 HH:mm:ss
远程(特殊环境)配置 > 远程配置 > 本地配置
配置远程推送
@Value(需要手动开启推送)
首先, 在需要配置的类中注入配置量
@Value("${pattern.dateformat}")
private String dataformat;
然后, 在这个类上添加注解 @RefreshScope
@ConfigurationProperties
@ConfigurationProperties 注解是 Spring Framework 中用于将外部配置(如 application.properties 或 application.yml 文件中的属性)映射到 Java 类的一个强大工具。通过使用这个注解,可以将一组相关的配置属性绑定到一个 POJO(Plain Old Java Object)类中,从而方便地管理和使用这些配置。
[label color="default"]pojo类[/lab
el] 示例
package cn.itcast.user.config;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Data
@Component
@ConfigurationProperties(prefix = "pattern")
public class PatternProperties {
private String dateformat;
private String envSharedValue;
}
这样子不用手动开启推送了, nacos在云端发布新配置后本地会自动使用