springCloud使用nacos作为注册中心及配置中心

1.下载及配置nacos服务端,并启动nacos

  首先到github下载nacos.zip文件,然后解压文件. .打开目录结构,到目录 bin/nacos-mysql.sql文件,将文件运行到自己的数据库中。然后打开application.properties文件,修改mysq连接

spring.datasource.platform=mysql

db.num=1
db.url.0=jdbc:mysql://localhost:3306/nacos-test?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=root
db.password=root

server.contextPath=/nacos
server.servlet.contextPath=/nacos
server.port=8848

然后进入到 bin目录   如果是windows  启用startup.cmd。如果是linux 启用startup.sh命令。

打开浏览器 输入http://localhost:8848/nacos    默认账号 nacos /nacos。可以看到下面页面

首先我创建了一个空间 test 然后创建了两个yml文件。

特别要注意我打标记的地方。

2、创建测试project 并配置nacos

 

首先创建springboot项目  然后pom中引入依赖

	<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-alibaba-nacos-config-server</artifactId>
			<version>0.9.0.RELEASE</version>
		</dependency>

		<dependency>
		    <groupId>org.springframework.cloud</groupId>
		    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
		    <version>0.9.0.RELEASE</version>
		</dependency>

然后再启动类加上@EnableDiscoveryClient注解。

 

现在我们创建了一个springboot项目  然后将配置文件重命名  bootstrap.yml。下面展示配置

server:
  port: 8001

test:
  nacos:
    namespace: a4dbaa04-04fe-48bc-80b8-58360e508b54
    group: bo
    server-addr: localhost:8848

spring:
  application:
    name: biz-server
  cloud:
    nacos:
      discovery:
        server-addr: ${test.nacos.server-addr}
        namespace: ${test.nacos.namespace}
      config:
        file-extension: yaml
        server-addr: ${test.nacos.server-addr}
        namespace: ${test.nacos.namespace}
        group: ${test.nacos.group}
        ext-config:
          - data-id: basic-common.yaml
            group: ${test.nacos.group}
            refresh: true

test标签下面的nacos配置,这个是我们自定义的。主要是为了方便切换,然后spring.application.name这个是biz-server ,在nacos中必须有biz-server.yaml  要不然会保存的,在中间可以添加一个环境变量,默认会给你去掉。

然后最主要的配置实在 discovery中,首先配置上面自定义的字段值,然后config下面配置了第一张图片打箭头的有地址 命名空间还有组别等等。然后ext-config是引用其他的自定义yaml的配置文件。

配置好后,启动项目,因为我再bootstrp.yml配置了端口为8001 在biz-server配置了8100,项目启动后,会启动端口8100,配置文件会覆盖掉bootstrap.yml中的数据。

自定义一个controller写个测试看是否能拿到变量

@RestController
@RequestMapping("/api/")
public class TestController {

    @Value("${test.sms.url}")
    private String url;

    @GetMapping("/getUrl")
    public String getConfig(){
        return url;
    }
}

测试结果是能拿到值。

 

3、动态获取数据

项目已经启动,拿到的url 是baidu.com  那现在我们在配置环境的修改配置,我们刷新页面是不生效的。

对controller做如下配置就可以了

@RestController
@RequestMapping("/api/")
@RefreshScope
public class TestController {

    @Value("${test.sms.url}")
    private String url;

    @GetMapping("/getUrl")
    public String getConfig(){
        return url;
    }
}

成功的动态刷新,如果获取的变量是一个component那么并不需要使用@RefreshScope便可以动态刷新。

 

对于nacos和eureka1.0做比较,我感觉nacos比较方便,且注册中心和配置中心在一起。如果使用eureka,那么还需要去做配置中心还要集合消息队列,会很麻烦,所以我极力推崇大家微服务的时候使用nacos来做注册中心和配置中心

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章