1 nacos注册中心
网上下载nacos,本地启动即可
1.1 maven配置文件
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
1.2 服务提供方
1.2.1 主启动类
主启动类添加 @EnableDiscoveryClient
1.2.2 controller
@RestController
@RequestMapping("/payment")
public class PaymentController extends BaseController<Long, Payment, PaymentService> {
@Value("${server.port}")
private String serverPort;
@GetMapping("/timeout")
public String timeout() throws InterruptedException {
Thread.sleep(4000);
return "timeout";
}
@Override
protected String getServerPort() {
return serverPort;
}
}
1.2.3 配置文件
application:
name: nacos-payment
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driverClassName: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/demo-cloud?allowMultiQueries=true&characterEncoding=utf8&useUnicode=true
username: root
password: hwl123
druid:
initial-size: 10
min-idle: 10
max-active: 100
max-wait: 60000 # 配置获取连接等待超时的时间
time-between-eviction-runs-millis: 60000 # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
min-evictable-idle-time-millis: 30000 # 配置一个连接在池中最小生存的时间,单位是毫秒
cloud:
nacos:
discovery:
server-addr: localhost:8848
启动后观察nacos控制台
1.3 服务消费方
1.3.1 配置RestTemplate
@Configuration
public class BeansConfig {
@Bean
@LoadBalanced
public RestTemplate restTemplate() {
return new RestTemplate();
}
}
1.3.2 服务调用
说明:nacos整合了ribbon,自带负载均衡效果
@RestController
@RequestMapping("/consumer")
public class PaymentController {
private String url = "http://nacos-payment";
@Autowired
private RestTemplate restTemplate;
@GetMapping("/payment/get/{id}")
public Map getPayment(@PathVariable("id") Long id) {
return restTemplate.getForObject(url + "/payment/get?id=" + id, Map.class);
}
}
1.3.3 配置文件
spring:
application:
name: nacos-pay-consumer
cloud:
nacos:
discovery:
server-addr: localhost:8848
1.3.4 调用测试
1.4 nacos和各个注册中心对比
1.4.1 CP和AP说明
Nacos 很强大,是支持 CP 和 AP 切换的。
一般C是所有节点在同一时刻看到的数据是一致的;而A的定义是所有的请求都会收到响应。
1.4.2 CP和AP选择标准
一般来说,如果不需要存储服务级别的信息且服务实例是通过nacos-client注册,并能够保持心跳上报,那么就可以选择AP模式。当前主流的服务如SpringCloud和Dubbo服务,都适用与AP模式,AP模式为了服务的可能性而减弱了一致性,因此AP模式下只支持注册临时实例。
如果需要在服务级别编辑或存储配置信息,那么CP是必须,K8S服务和DNS服务则适用于CP模式。CP模式下则支持注册持久化实例,此时则是以Raft协议为集群运行模式,该模式下注册实例之前必须先注册服务,如果服务不出存在,则会返回错误。
1.4.3 CP和AP切换
curl -X PUT '$NACOS_SERVER:8848/nacos/v1/ns/operator/switches?entry=serverMode&value=CP'
2 nacos配置中心
2.1 入门案例
2.1.1 maven配置文件
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
2.1.2 配置文件
bootstrap.yml
server:
port: 3377
spring:
application:
name: nacos-config
cloud:
nacos:
discovery:
server-addr: localhost:8848
config:
server-addr: localhost:8848
file-extension: yaml # 指定yml类型配置文件
group: DEFAULT_GROUP # 指定分组
namespace: public # 指定命名空间。nacos新建命名空间后需要重启nacos服务
application.yml
spring:
profiles:
active: dev
2.1.3 nacos配置
配置文件命名规则:
s
p
r
i
n
g
.
a
p
p
l
i
c
a
t
i
o
n
.
n
a
m
e
−
{spring.application.name}-
spring.application.name−{spring.profiles.active}.${…file-extension}
2.1.4 代码访问
/**
* @author huwenlong
* @date 2020/5/17 13:36
* 配置动态刷新:@RefreshScope
*/
@RefreshScope
@RestController
@RequestMapping("/config")
public class ConfigController {
@Value("${config.info}")
private String configInfo;
@GetMapping("/get")
public String getConfig() {
return configInfo;
}
}
访问测试
修改配置后发布,不用重启应用即可获取最新配置
2.2 Namespace、Group&DataId关系
- namespace(命名空间)
相当于环境,开发环境 测试环境 生产环境 ,每个空间里面的配置是独立的。命名空间默认是 public - Group 组
这个类似我们的项目,比如 风控系统 ,交易系统, 就是不同的项目。组默认是 DEFAULT_GROUP - Data ID
这个就是我们项目下面的 配置文件
2.3 数据持久化
1 执行 nacos-mysql.sql 脚本创建表
2 修改application.properties
2.4 集群部署
架构图
2.4.1 配置文件修改
复制cluster.config.example 到当前目录 并改名 : cluster.config 并加入如下内容
设置集群的 IP + port
2.4.2 修改启动脚本
修改nacos的启动脚本startup.sh使其支持指定端口启动
2.4.3 配置nginx
2.4.4 启动集群
依次执行如下命令
./startup.sh -p 3344
./startup.sh -p 3355
./startup.sh -p 3366