Nacos
先安装Nacos server,sh startup.sh -m standalone
配置中心 8848端口
添加依赖,
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>${latest.version}</version>
</dependency>
添加配置,bootstrap.properties 地址和应用名
# bootstrap.properties
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
spring.application.name=example
- 通过 Spring Cloud 原生注解
@RefreshScope
实现配置自动更新:
@RestController
@RequestMapping("/config")
//动态刷新配置@RefreshScope+ @Value 优先使用配置中心配置
@RefreshScope
public class ConfigController {
@Value("${useLocalCache:false}")
private boolean useLocalCache;
@RequestMapping("/get")
public boolean get() {
return useLocalCache;
}
}
给指定服务指定配置
给配置中心添加数据集(Data Id),默认规则
p
r
e
f
i
x
(配置文件中的
n
a
m
e
)
−
{prefix}(配置文件中的name)-
prefix(配置文件中的name)−{spring.profiles.active}.${file-extension}
例如:gulimall-coupon.properties/yaml
注册中心,注册发现
1.添加依赖:
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>${latest.version}</version>
</dependency>
2.配置文件application.properties 中配置 Nacos server 的地址:
server.port=8070
spring.application.name=service-provider
# new spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
3.添加@EnableDiscoveryClient注解开启发现客户端,给Application上开启服务注册发现功能
@SpringBootApplication
@EnableDiscoveryClient
public class NacosProviderApplication {
public static void main(String[] args) {
SpringApplication.run(NacosProviderApplication.class, args);
}
@RestController
class EchoController {
@RequestMapping(value = "/echo/{string}", method = RequestMethod.GET)
public String echo(@PathVariable String string) {
return "Hello Nacos Discovery " + string;
}
}
}
开启负载均衡Ribbon
nacos自动整合了ribbon,如果要开启负载均衡。
给 RestTemplate 实例添加 @LoadBalanced 注解,开启 @LoadBalanced 与 Ribbon 的集成:
@SpringBootApplication
@EnableDiscoveryClient
public class NacosConsumerApplication {
//new bean注入时restTemplate添加负载均衡注解,由于在Application类,
//与@Configuration配置类相同,注入@Bean也可以放在配置类
@LoadBalanced
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
public static void main(String[] args) {
SpringApplication.run(NacosConsumerApplication.class, args);
}
@RestController
public class TestController {
private final RestTemplate restTemplate;
@Autowired
public TestController(RestTemplate restTemplate) {this.restTemplate = restTemplate;}
@RequestMapping(value = "/echo/{str}", method = RequestMethod.GET)
public String echo(@PathVariable String str) {
//restTemplate发送的请求将会被Ribbon拦截并负载均衡,
//远程调用请求应该使用应用名(模块名,服务名),如果直接使用ip则会报错
return restTemplate.getForObject("http://service-provider/echo/" + str, String.class);
}
}
}
//负载均衡配置注入也可以写在配置类
package com.example.orderservice.config;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;
@Configuration
public class RestTemplateConfig {
@Bean
@LoadBalanced // 开启负载均衡 Ribbon, 发送的请求都会被Ribbon拦截。必须使用应用名代替ip,否则报错
public RestTemplate restTemplate(){
return new RestTemplate();
}
}
命名空间,配置分组
命名空间举例,dev/prod/,也可以每个微服务自己名字做命名空间,比如common,coupon
命名空间指定后,有类似uuid,可以在配置文件指定命名空间,做隔离
# bootstrap
spring.cloud.nacos.config.namespace=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx
配置集id DataId,类似配置文件名,
分组隔离,默认DEFAULT_GROUP组
添加配置时可以指定分组,做隔离,
距离1111,1212,618等配置,到时间更换分组
# bootstrap
spring.cloud.nacos.config.group=1111
加载多个配置集(加载多个配置文件)
配置做抽取,比如数据源,等,抽取为单个文件,
# bootstrap
spring.cloud.nacos.config.extension-configs[0].data-id=order.yaml
spring.cloud.nacos.config.extension-configs[0].group=shop
# refresh配置刷新是否重启服务动态刷新
spring.cloud.nacos.config.extension-configs[0].refresh=true
spring.cloud.nacos.config.extension-configs[1].data-id=datasource.yaml
spring.cloud.nacos.config.extension-configs[1].group=shop
spring.cloud.nacos.config.extension-configs[1].refresh=true