文章目录
- springcloud alibaba
- nacos
- 1. nacos是注册中心和配置中心。
- 2. 如何注册到nacos注册中心
- 3. nacos服务发现
- 4. nacos集成openFeign
- 5. nacos集成gateway
- 6. 以集群模式启动nacos-server
- 7. nacos配置中心
springcloud alibaba
springcloud alibaba项目地址: https://github.com/alibaba/spring-cloud-alibaba
版本依赖关系:https://github.com/alibaba/spring-cloud-alibaba/wiki/版本说明
nacos
1. nacos是注册中心和配置中心。
NacosServer相当于EurekaServer,EurekaServer是自己搭建的项目,NacosServer不需要自己搭建。
下载NacosServer地址:https://github.com/alibaba/nacos/releases/tag/2.0.3。
下载完成后创建一个nacos数据库,导入nacos-server中conf目录下的nacos-mysql.sql。
根据本机的数据库 修改conf目录下的application.properties
1
2
3
4
5
6
7
8
9
10
11
12#*************** Config Module Related Configurations ***************# ### If use MySQL as datasource: spring.datasource.platform=mysql ### Count of DB: db.num=1 ### Connect URL of DB: db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC db.user.0=root db.password.0=123456
命令运行bin目录startup.cmd startup.cmd -m standalone或者修改startup.cmd 将set MODE="cluster"修改为
set MODE="standalone“ ,这个设置是集群启动改为单机启动
如果mysql版本为8.0出现启动报错,可以创建plugin/mysql目录,把对应的jar包放进去重新启动
启动成功访问 http://localhost:8848/nacos
用户名密码都是nacos
2. 如何注册到nacos注册中心
创建一个springboot项目,注意版本依赖关系,这里使用
Spring Cloud Alibaba Version | Spring Cloud Version | Spring Boot Version |
---|---|---|
2.2.7.RELEASE | Spring Cloud Hoxton.SR12 | 2.3.12.RELEASE |
添加springweb和nacos-discovery依赖:
1
2
3
4
5
6
7
8
9<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency>
配置文件:nacos注册中心和eureka相比,nacos哟是命名空间的概念它可以根据命名空间的不同区分隔离两个服务。在命名空间内还有分组的区分。比如两个项目有服务名撞了就可以做到区分隔离。
1
2
3
4
5
6
7
8
9
10
11
12spring: application: name: nacos-client-a cloud: nacos: #如果不指定命名空间默认注册到public,没有指定分组默认DEFAULT_GROUP server-addr: localhost:8848 #在这个地址注册自己 username: nacos password: nacos server: port: 8080
启动类添加注解:@EnableDiscoveryClient 开启服务发现客户端
1
2
3
4
5
6
7
8
9
10@SpringBootApplication @EnableDiscoveryClient //开启服务发现客户端 public class NacosClintAApplication { public static void main(String[] args) { SpringApplication.run(NacosClintAApplication.class, args); } }
启动项目,再次访问nacos查看服务列表可以发现注册成功
3. nacos服务发现
再创建一个springboot项目注册到注册中心,这里给出一个配置文件,其他设置和上一个一样
1
2
3
4
5
6
7
8
9
10
11
12
13
14server: port: 8081 spring: application: name: nacos-client-b cloud: nacos: username: nacos password: nacos server-addr: localhost:8848 discovery: # 注册相关配置 namespace: c98c08fc-a4c2-433b-bc4a-bcb68496fd7b group: A_GROUP
通过A去访问B,在A中创建controller类
1
2
3
4
5
6
7
8
9
10
11
12
13@RestController public class TestController { @Autowired private DiscoveryClient discoveryClient; @GetMapping("test") public String test(){ List<ServiceInstance> instances = discoveryClient.getInstances("nacos-client-b"); System.out.println(instances); return "ok"; } }
注意:跨命名空间或者跨组都请求不到,只有同组同命名空间才能访问
所以修改配置文件保持一致再访问localhost:8080/test,才能得到ok的结果
4. nacos集成openFeign
如果要在A中请求B提供的接口,B的controller代码:
1
2
3
4
5
6
7
8
9@RestController public class testController { @GetMapping("info") public String info(){ return "b提供的接口"; } }
然后A添加openFeign依赖,因为他是springcloud提供的,所以还要确定springcloud依赖遵循对应关系,这里使用Hoxton.SR12版本,pom文件:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63<properties> <java.version>1.8</java.version> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <spring-boot.version>2.3.12.RELEASE</spring-boot.version> <spring-cloud-alibaba.version>2.2.7.RELEASE</spring-cloud-alibaba.version> <spring-cloud.version>Hoxton.SR12</spring-cloud.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <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-test</artifactId> <scope>test</scope> <exclusions> <exclusion> <groupId>org.junit.vintage</groupId> <artifactId>junit-vintage-engine</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>${spring-boot.version}</version> <type>pom</type> <scope>import</scope> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-alibaba-dependencies</artifactId> <version>${spring-cloud-alibaba.version}</version> <type>pom</type> <scope>import</scope> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${spring-cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
A启动类添加注解@EnableFeignClients
1
2
3
4
5
6
7
8
9
10
11@SpringBootApplication @EnableDiscoveryClient @EnableFeignClients public class NacosClientAApplication { public static void main(String[] args) { SpringApplication.run(NacosClientAApplication.class, args); } }
A中feign接口编写:
1
2
3
4
5
6
7@FeignClient(value = "nacos-client-b") public interface testFeign { @GetMapping("info") public String info(); }
A的controller修改:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16@RestController public class TestController { @Autowired private DiscoveryClient discoveryClient; @Autowired private TestFeign testFeign; @GetMapping("test") public String test(){ List<ServiceInstance> instances = discoveryClient.getInstances("nacos-client-b"); System.out.println(instances); return testFeign.info(); } }
AB都重新启动后可以发现调用成功
5. nacos集成gateway
创建一个项目 添加gateway和nacos-discovery依赖
配置文件:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19server: port: 80 spring: application: name: gateway cloud: nacos: server-addr: localhost:8848 username: nacos password: nacos discovery: namespace: c98c08fc-a4c2-433b-bc4a-bcb68496fd7b group: A_GROUP gateway: discovery: locator: enabled: true #开启路由 lower-case-service-id: true
启动类添加注解:
1
2
3
4
5
6
7
8
9
10@SpringBootApplication @EnableDiscoveryClient public class GatewayApplication { public static void main(String[] args) { SpringApplication.run(GatewayApplication.class, args); } }
全部启动成功后,访问http://localhost/nacos-client-a/test,依然能够得到B提供接口的返回结果即成功
6. 以集群模式启动nacos-server
复制多个nacos,修改conf目录下配置文件application.properties,每个配置端口不同。
再根据application.properties.example创建一个cluster.conf文件,里面编写ip和端口号即可。
这里给出一个例子,如果两个配置文件端口分别为8848和8850,cluster.conf文件内容如下:
192.168.137.1:8848
192.168.137.1:8850
7. nacos配置中心
启动一个nacos-server,再配置管理中点击+号新增一个配置,这里以yaml为例
注意:nacos配置中心和注册中心一样有空间和组的概念用于区分配置文件
如何配置中心里的值?
新建一个springboot项目来,添加nacos configuration和spring web依赖,再resources目录下创建bootstrap.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15server: port: 8081 spring: application: name: nacos-config-a cloud: nacos: config: server-addr: localhost:8848 username: nacos password: nacos prefix: nacos-config # 配置文件Data ID file-extension: yml #文件类型
创建controller
1
2
3
4
5
6
7
8
9
10
11@RestController public class TestController { @Value("${lgd.carry}") private String name; @GetMapping("info") public String info(){ return name; } }
启动项目成功即配置正确,访问localhost:8081/info可以返回ame。
**nacos配置中心的配置文件持久化在哪?**观察nacos数据库表config_info可以发现数据存在该表中
如果此时通过nacos编辑配置文件,再次访问localhost:8081/info发现结果不变,在类上加注解@RefreshScope 可以解决该问题
**如何回滚配置文件?**通过配置管理-历史版本回滚即可,历史记录存在表his_config_info中
如何读取多个配置文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19spring: application: name: nacos-config-a cloud: nacos: config: server-addr: localhost:8848 username: nacos password: nacos file-extension: yml namespace: extension-configs: - dataId: group: refresh: - dataId: group: refresh:
如何读取共享配置文件?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20spring: application: name: nacos-config-a cloud: nacos: config: server-addr: localhost:8848 username: nacos password: nacos file-extension: yml namespace: shared-configs: #共享配置文件 # - application-dev.yml #写共享文件名,这种写法只能是默认组DEFAULT_GROUP - dataId: #这种写法也可以 group: refresh: - dataId: group: refresh:
os-config-a
cloud:
nacos:
config:
server-addr: localhost:8848
username: nacos
password: nacos
file-extension: yml
namespace:
shared-configs: #共享配置文件
# - application-dev.yml #写共享文件名,这种写法只能是默认组DEFAULT_GROUP
- dataId: #这种写法也可以
group:
refresh:
- dataId:
group:
refresh:
1
最后
以上就是慈祥大雁最近收集整理的关于springcloud alibaba快速入门springcloud alibaba的全部内容,更多相关springcloud内容请搜索靠谱客的其他文章。
发表评论 取消回复