spring_cloud_alibaba-nacos的使用

下载nacos

https://github.com/alibaba/nacos/releases

 

 

 下载下来,解压,本人使用的是windows,点击到nacos的bin文件夹下,双击startup.cmd,linux是执行.sh后缀的脚本


访问http://localhost:8848/nacos/出现下面这个界面就成功了

 

在pom文件中定义版本的依赖

 <dependencies>

        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-alibaba-dependencies</artifactId>
            <version>2.1.0.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>2.2.5.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</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>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            <version>2.1.0.RELEASE</version>
        </dependency>

application.yml文件的配置

server:
  port: 8082
spring:
  application:
    name: nacos-second
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848

主函数添加这两个注解

@SpringBootApplication
@EnableDiscoveryClient

下面贴出controller的代码,这儿会启动两个服务,会改变他的端口号,根据端口号的不同来查看来自不同的服务

@RestController
public class HelloController {

    @Value("${server.port}")
    private String port;

    @RequestMapping("/second")
    public String hello() {
        return "hello Second Nacos "+port;
    }
}

另外一个项目

pom文件

    <dependencies>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-alibaba-dependencies</artifactId>
            <version>2.1.0.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            <version>2.1.0.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
            <version>2.1.0.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>2.2.5.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</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>com.netflix.archaius</groupId>
            <artifactId>archaius-core</artifactId>
            <version>0.7.6</version>
        </dependency>


    </dependencies>

yml文件

spring:
  application:
    name: nacos-first
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848

主函数添加注解

@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients

controller代码

@RestController
public class EchoFirstController {

    @Autowired
    EchoSecondClient echoSecondClient;

    @GetMapping("/first")
    public String hello() {
        return "first service + 》》》》"+echoSecondClient.hello();
    }
}
EchoSecondClient的代码
@FeignClient(name = "nacos-second")
public interface EchoSecondClient {

    @RequestMapping("/second")
    String hello();
}
@FeignClient(name = "nacos-second")是上面服务的服务名
@RequestMapping("/second")为上面服务的请求地址
这儿已经集成了fegin Nacos默认支持负载均衡
应为Nacos是懒加载的所有需要请求一次才会在Nacos的控制台服务列表中显示

下面将是Nacos的配置中心

pom文件

 <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</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>
    </dependencies>
    <!--依赖版本定义-->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Greenwich.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>0.2.1.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

需要修改application.yml为bootstrap.yml文件

spring:
  application:
    name: nacos-config-client
  cloud:
    nacos:
      config:
        server-addr: 127.0.0.1:9000
        file-extension: yml
        #默认为nacos-config-client.properties 是以{spring.application.name)-{profiles.active}.{file-extension}组成,这个的优先级最高
        group: demo
##        #这个是分组,环境隔离
#        namespace: be7d6edf-3896-47a4-a124-218e01c10821
        #这个是命名空间,放命名空间的id
#        shared-dataids:
#        refreshable-dataids:
        #后面街上公共的服务名,refreshable-dataids代表当公共服务修改后也会自动刷新配置文件,分组无效
#        ext-config:
#          - data-id: common.yml
#            group: demo
#            refresh: true
  #         这个也是配置公共服务的。但是分组有效
#  profiles:
#    active: dev
#  cache:
#    redis:
#      cache-null-values:

安装对应的匹配规则,在Nacos控制台打上添加相应的yml文件,注意这儿添加的时候名字一定要添加后缀名

 

 

 就像这样

在主类上添加这两个注解

@SpringBootApplication
@EnableDiscoveryClient

这儿写了一个controller类来测试配置中心是否可以 controller的代码为

@RestController
@RefreshScope
public class HelloController {

    @Value("${test:空hello}")
    public String hello;

    @GetMapping("/hello")
    public String hello() {
        return  hello+"世界";
    }

}
@RefreshScope的作用是检测到配置文件发生变化,会重新拉取刷新
@Value("${test:空hello}") 如果没有则为空hello,防止报错
最后最后就是重要的一点 Nacos的集群配置

Nacos的集群配置需要的是mysql5.几的版本,mysql8会出错,我使用的是服务器的docker的5.7版本的mysql

在nacos\conf目录下有个Nacos-mysql.sql的文件,先创建nacos的数据库,在执行以下这个sql脚本导入数据库表

 

 

接下来修改 nacos\conf 的cluster.conf ,格式是ip加端口

127.0.0.1:9001
127.0.0.1:9002
127.0.0.1:9003

 

在将你的这个nacos复制3分(最少)

 在修改位于nacos\conf下的application.properties的配置文件,

server.port=9001

和上面的三个端口对应

在最后加上

spring.datasource.platform=mysql

db.num=1
db.url.0=jdbc:mysql://ip:端口/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=root
db.password=root

然后将这三个都启动起来就可以了,然后在配置nginx,在nginx的conf文件夹下的nginx.conf中添加下面的路径

upstream cluster {
        server 127.0.0.1:9001;
        server 127.0.0.1:9002;
        server 127.0.0.1:9003;
    }
    #nacos的集群路由
    server{
        listen 9000;
        server_name localhost;
        location / {
            proxy_pass http://cluster;
        }
    }
    

现在只需要访问http://localhost/9000就可以了

posted @ 2020-03-21 10:58  张含韵好可爱  阅读(330)  评论(0编辑  收藏  举报