Nacos服务注册和配置中心

nacos安装

在官网下载压缩包https://nacos.io/zh-cn/docs/quick-start.html
然后执行对应的命令。
启动完成后,访问localhost:8848/nacos即可访问该界面。账号密码都是nacos

服务注册中心

  • 生产者:
    POM:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
        <dependencies>
    <!-- alibabanacos-->
    <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-web</artifactId>
    </dependency>
    <dependency>
    <groupId>top.zfxt.springcloud</groupId>
    <artifactId>cloud-api-commons</artifactId>
    <version>1.0-SNAPSHOT</version>
    </dependency>
    <dependency>
    <groupId>org.jetbrains.kotlin</groupId>
    <artifactId>kotlin-reflect</artifactId>
    <version>1.9.0</version>
    </dependency>
    </dependencies>

    YML:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    server:
    port: 9001

    spring:
    application:
    name: nacos-provider
    cloud:
    nacos:
    discovery:
    server-addr: localhost:8848

    management:
    endpoints:
    web:
    exposure:
    include: "*"

    主启动类:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    @SpringBootApplication
    @EnableDiscoveryClient
    open class NacosPayment9001 {

    }

    fun main(args: Array<String>) {
    runApplication<NacosPayment9001>(*args)
    }

    复制微服务:

  • 消费者:
    YML:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
server:
port: 83

spring:
application:
name: nacos-order-consumer

cloud:
nacos:
discovery:
server-addr: localhost:8848

# 消费者将要去访问的微服务名称(注册成功进nacos的微服务提供者)

service-url:
nacos-user-service: http://nacos-payment-provider

然后他需要配置restTemplate,在业务类中也可以使用到yml中配置的servcie-url

业务类:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
@RestController
class OrderNacosController {
@Resource
private lateinit var restTemplate: RestTemplate

@Value("\${service-url.nacos-user-service}")
private lateinit var serverURL: String

@GetMapping("/consumer/payment/nacos/{id}")
fun paymentInfo(@PathVariable("id") id: Long): String {
return restTemplate.getForObject(serverURL+"/payment/nacos/$id" ,String::class)
}
}

CP+AP的选择和使用

服务配置中心

  • 基础配置信息
    POM:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <!--nacos-config-->
    <dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
    </dependency>
    <!--nacos-discovery-->
    <dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    </dependency>
    YML:
  1. bootstrap.yml

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    # nacos配置
    server:
    port: 3377
    spring:
    application:
    name: nacos-config-client
    cloud:
    nacos:
    discovery:
    server-addr: localhost:8848 #Nacos作为服务注册中心
    config:
    server-addr: localhost:8848 #Nacos作为服务配置中心
    file-extension: yaml # 指定需要yaml格式的配置

  2. application.yml

1
2
3
spring:
profiles:
active: dev # 表示开发环境

主启动类:

1
2
3
4
5
6
7
8
9
@SpringBootApplication
@EnableDiscoveryClient
open class NacosClient3377 {

}

fun main(args: Array<String>) {
runApplication<NacosClient3377>(*args)
}

业务类:

1
2
3
4
5
6
7
8
9
10
11
12
@RestController
@RefreshScope //支持Nacos的动态刷新功能
open class ConfigInfoController {
@Value("\${config.info}")
private lateinit var configInfo: String

@GetMapping("/configInfo")
fun getConfigInfo(): String {
return configInfo
}

}

匹配规则:

然后在nacos服务中添加一个配置项

这里说明一个错误

详见(https://zfxt.top/index.php/archives/411/)
在这里使用时,很明显,RefreshScoping他会动态生成。也就是会额外的创建,因此我们需要给与他open也就是允许被修改的权限,同时,我们需要保证他的安全性,在这里private是无法使用的,private和open不能同时使用。他们定义相冲突。因此我选择使用了protected

在使用NACOS的话,你修改了配置,他可以自动更新并加载。也就是代替了原本的POST更新请求和bus总线

Nacos的分类管理

  1. DataID方案
    就是修改spring.profiles.active 常用的有dev,test等
  2. Group方案
    在Nacos的图形化界面为配置文件添加Group,然后在bootstrap.yml下的config下添加一个group属性即可
  3. NameSpace方案
    在Nacos中建立新的命名空间。他会生成一些对应的namespaceID。
    然后再bootstrap.yml中可以添加如下:

Nacos集群和持久化配置


https://nacos.io/zh-cn/docs/cluster-mode-quick-start.html

持久化配置

将内嵌式数据库替换成mysql高可用数据源。保证数据的一致性
从derby到mysql的切换:

启动的集群的cluster配置方式不能是127.0.0.1,linux无法识别

shell命令,添加新端口启动方式