本文介绍spring cloud 集成 nacos案例
官方文档:https://nacos.io/zh-cn/docs/what-is-nacos.html
单机部署:
1.git克隆项目
git clone https://github.com/alibaba/nacos.git
2.进入根目录
cd nacos/
3.maven编译
mvn -Prelease-nacos -Dmaven.test.skip=true clean install -U
3.进入目录
cd distribution/target/nacos-server-${version}/nacos/bin1
注意${version} 根据自己选择的版本
单机运行 后面加 -m standalone
4.启动服务
Linux/Unix/Mac环境:sh startup.sh -m standalone
win环境: cmd startup.cmd
启动后打印–
启动成功后,访问打印的ip,默认的端口为8848
默认账号:nacos
默认密码:nacos
接下来介绍集成nacos代码:
e:2#s-0;jHjd
集成nacos
发布配置:
curl -X POST "http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=demo-nacos.yml&group=DEFAULT_GROUP&content=useLocalCache=true"
配置中心代码
1.pom文件
<properties>
<java.version>11</java.version>
<spring-cloud-alibaba.version>2.2.1.RELEASE</spring-cloud-alibaba.version>
</properties>
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${spring-cloud-alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
2.配置文件 bootstrap.yml
spring:
application:
name: demo-nacos
cloud:
nacos:
#配置中心
config:
#nacos地址
server-addr: 127.0.0.1:8848
#配置文件狗追扩展名,支持yml和properties,默认为properties
file-extension: yml
#命名空间,默认为public,命名空间用于区分不同环境,这里的值是在控制台创建时的id,可以手工输入也可以自动生成
namespace: df70392d-c0c8-43ca-9045-688880e572f6
#分组名在同一个命名空间内的分组名称
group: demo-nacos
#注册中心
discovery:
server-addr: 127.0.0.1:8848
namespace: df70392d-c0c8-43ca-9045-688880e572f6
group: demo-nacos
profiles:
# 环境,用于区分相同分组的不同环境
active: dev
server:
port: ${PORT:8090}
其中命名空间和分组的作用都是用于分割不同环境的
3.代码,启动类啥都不用加
@RestController
@RequestMapping("/config")
@RefreshScope
public class ConfigController {
//nacos上面存的值,默认false
@Value("${useLocalCache:false}")
private boolean useLocalCache;
//用于获取注册的服务信息
@Autowired
private DiscoveryClient discoveryClient;
//用于获取服务的环境信息
@Autowired
private Environment environment;
@RequestMapping("/get")
public boolean get() {
return useLocalCache;
}
@GetMapping("/getConfig")
public List<String> getConfig(){
return discoveryClient.getServices();
}
@GetMapping("/getPort")
public String getPort(String s){
return "我是"+environment.getProperty(s);
}
}
4.测试
1.执行
curl localhost:8081/config/get
2.修改配置值继续执行
注意:怎么上传配置,可以去控制台操作,也可以用nacos提供的api操作,下面是官网的一个例子
curl -X POST "http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=example.properties&group=DEFAULT_GROUP&content=useLocalCache=true
注册中心测试
1.pom文件,增加一点
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
<!--spring cloud-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
<version>2.2.5.RELEASE</version>
</dependency>
2.配置文件,增加了feign的配置
spring:
application:
name: demo-server
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
namespace: df70392d-c0c8-43ca-9045-688880e572f6
group: demo-nacos
server:
port: ${PORT:8090}
# feign配置
feign:
sentinel:
# 为feign整合sentinel
enabled: true
httpclient:
# 让feign使用apache httpclient做请求;而不是默认的urlconnection
enabled: true
# feign的最大连接数
max-connections: 200
# feign单个路径的最大连接数
max-connections-per-route: 50
3.启动类增加扫描注解
@SpringBootApplication
@EnableFeignClients(value="com.git.demoserver.feign")
4.代码
@RestController
@RequestMapping("/config")
@RefreshScope
public class ConfigController {
@Autowired
private ApiService apiService;
@GetMapping("/getConfig")
public List<String> getConfig(){
return apiService.getServices();
}
@GetMapping("/getPort")
public String getPort(){
return "我是"+apiService.getPort("server.port");
}
}
@FeignClient(name = "demo-nacos")
public interface ApiService {
@RequestMapping(method=RequestMethod.GET,value = "/config/getConfig")
List<String> getServices();
@RequestMapping(method=RequestMethod.GET,value = "/config/getPort")
String getPort(@RequestParam(name="s",required = true) String s);
}
5.测试同上
配置和服务信息都可以去控制台查看
小结:
整体流程和一般的springcloud差不多,config直接和注册中心一起了,nacos基本用法就这样
参考文章nacos官网