概述
文章目录
- 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
#*************** 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依赖:
<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哟是命名空间的概念它可以根据命名空间的不同区分隔离两个服务。在命名空间内还有分组的区分。比如两个项目有服务名撞了就可以做到区分隔离。
spring:
application:
name: nacos-client-a
cloud:
nacos: #如果不指定命名空间默认注册到public,没有指定分组默认DEFAULT_GROUP
server-addr: localhost:8848 #在这个地址注册自己
username: nacos
password: nacos
server:
port: 8080
启动类添加注解:@EnableDiscoveryClient 开启服务发现客户端
@SpringBootApplication
@EnableDiscoveryClient //开启服务发现客户端
public class NacosClintAApplication {
public static void main(String[] args) {
SpringApplication.run(NacosClintAApplication.class, args);
}
}
启动项目,再次访问nacos查看服务列表可以发现注册成功
3. nacos服务发现
再创建一个springboot项目注册到注册中心,这里给出一个配置文件,其他设置和上一个一样
server:
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类
@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代码:
@RestController
public class testController {
@GetMapping("info")
public String info(){
return "b提供的接口";
}
}
然后A添加openFeign依赖,因为他是springcloud提供的,所以还要确定springcloud依赖遵循对应关系,这里使用Hoxton.SR12版本,pom文件:
<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
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class NacosClientAApplication {
public static void main(String[] args) {
SpringApplication.run(NacosClientAApplication.class, args);
}
}
A中feign接口编写:
@FeignClient(value = "nacos-client-b")
public interface testFeign {
@GetMapping("info")
public String info();
}
A的controller修改:
@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依赖
配置文件:
server:
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
启动类添加注解:
@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
server:
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
@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中
如何读取多个配置文件
spring:
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:
如何读取共享配置文件?
spring:
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:
最后
以上就是慈祥大雁为你收集整理的springcloud alibaba快速入门springcloud alibaba的全部内容,希望文章能够帮你解决springcloud alibaba快速入门springcloud alibaba所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复