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就可以了