spring cloud alibaba nacos
首先去下载nacos服务端
下载解压后
进入目录下的bin目录
执行单机模式
sh startup.sh -m standalone
然后就可以访问
http://192.168.200.130:8848/nacos
我用的是nacos-server-1.4.8.zip
nacos账号密码默认是nacos
maven 父工程
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.4.RELEASE</version>
<relativePath />
</parent>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Greenwich.SR1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.1.2.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
子工程
<?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>
<artifactId>springcloudalibaba</artifactId>
<groupId>org.example</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>nocas</artifactId>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- Nacos Discovery -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
</dependencies>
</project>
启动文件
package org.example;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
@SpringBootApplication
@EnableDiscoveryClient
public class NacosApplication {
public static void main(String[] args) {
SpringApplication.run(NacosApplication.class,args);
}
}
配置文件名要是bootstrap.yml(确保Nacos的配置放在了正确的配置文件中。对于Spring Cloud应用,Nacos的配置应该放在bootstrap.properties
或bootstrap.yml
文件中,而不是application.properties
或application.yml
中。这是因为bootstrap
配置文件中的配置会在应用上下文初始化之前加载,确保在应用启动时就能正确连接到Nacos服务器)
server:
port: 18080
spring:
application:
name: nacos-test1
cloud:
nacos:
discovery:
server-addr: 192.168.200.130:8848 # Nacos服务地址
然后就可以成功把服务注册到nacos注册中心了
nacos是利用ribbon来做负载均衡的
验证:
首先把配置文件中的端口号不写死,用个变量代替
server:
port: ${PORT}
spring:
application:
name: nacos-test1
cloud:
nacos:
discovery:
server-addr: 192.168.200.130:8848 # Nacos服务地址
加两个实例
发现服务名为
nacos-test1只有一个,而实例数有两个,所以可以负载均衡
负载均衡我们可以用ribbon来做,也可以用NacosRule来做,
,另外
从Spring Cloud 2020版本开始,Spring Cloud官方推荐使用Spring Cloud LoadBalancer
来替代Ribbon
作为负载均衡器。这是因为Ribbon
已经停止更新维护,而Spring Cloud LoadBalancer
是Spring Cloud官方提供的负载均衡组件,它与Spring Cloud的其他组件更加紧密集成,提供了更好的易用性和稳定性。Spring Cloud LoadBalancer
支持响应式编程的方式异步访问客户端,依赖于Spring Web Flux实现客户端负载均衡调用。
在Spring Cloud Hoxton.M2版本中,Spring Cloud LoadBalancer
首次被整合进来作为Ribbon
的替代品。因此,如果您使用的是Spring Cloud 2020版本或更高版本,应当使用Spring Cloud LoadBalancer
来实现负载均衡。在使用时,您只需要在需要负载均衡的RestTemplate
或WebClient
上添加@LoadBalanced
注解即可。
我这里使用的老版本,所以使用ribbon来做实验
新创建一个模块,来测试ribbon
maven依赖
<?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>
<artifactId>springcloudalibaba</artifactId>
<groupId>org.example</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>ribbon</artifactId>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>
<!-- Nacos Discovery -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
</dependencies>
</project>
代码
ribbon测试模块代码
@RestController
@RequestMapping("/re")
public class RequestTestController {
private final RestTemplate restTemplate;
@Autowired
public RequestTestController(RestTemplate restTemplate) {
this.restTemplate = restTemplate;
}
@GetMapping("look")
public Integer look(){
return restTemplate.getForObject("http://nacos-test1/test", Integer.class);
}
}
nacos-test1 代码
@RestController
@RequestMapping("/test")
public class TestController {
@Value("${server.port}")
private String serverPort;
@GetMapping
public String findById(){
return serverPort;
}
}
启动类
package org.example;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
@SpringBootApplication
@EnableDiscoveryClient
public class RibbonTestApplication {
public static void main(String[] args) {
SpringApplication.run(RibbonTestApplication.class,args);
}
@Bean
@LoadBalanced //启动负载均衡
public RestTemplate restTemplate(){
return new RestTemplate();
}
}
请求后发现打印的端口会变,代表负载均衡成功
以上就是nacos作为注册中心的简单使用
配置中心
添加依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
配置文件详情
spring:
cloud:
nacos:
config:
server-addr: 127.0.0.1:8848 # Nacos服务器地址
namespace: your-namespace # Nacos命名空间ID(如果需要)
group: DEFAULT_GROUP # 配置分组,默认为DEFAULT_GROUP
data-id: your-application-name.yml # 配置文件的数据ID
file-extension: yml # 配置文件的后缀,这里是YAML格式
我的配置
server:
port: ${PORT}
spring:
application:
name: nacos-test1
cloud:
nacos:
discovery:
server-addr: 192.168.200.131:8848 # Nacos服务地址
config:
server-addr: 192.168.200.131:8848
file-extension: yml #nacos远程配置文件的后缀
key: 99999
添加一个配置
data-id要写
${data-id}.${file-extension}
我这里就是服务名.yml
然后发布前是99999
发布后
自动刷新需要再bean上加这个注解
@RefreshScope