Nacos的搭建使用以及遇到的问题

环境准备

1、nacos版本:2.1.2,下载地址:https://github.com/alibaba/nacos/releases

2、JDK版本:jdk1.8.0_351,下载地址 http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

3、SpringBoot、SpringCloud、SpringCloudAlibaba版本

​ 参考https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E

SpringBoot版本spring.cloud.alibaba版本spring.cloud版本
2.4.22021.12020.0.1

一、部署Nacos

1、下载地址:

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

2、解压

unzip nacos-server-2.1.2.zip 或者 tar -xvf nacos-server-2.1.2.tar.gz

cd nacos/bin

3、启动

启动命令(standalone代表着单机模式运行,非集群模式):

sh startup.sh -m standalone

访问:http://192.168.129.128:8848/

4、常用命令

服务注册

curl -X POST ‘http://127.0.0.1:8848/nacos/v1/ns/instance?serviceName=nacos.naming.serviceName&ip=20.18.7.10&port=8080’

服务发现

curl -X GET ‘http://127.0.0.1:8848/nacos/v1/ns/instance/list?serviceName=nacos.naming.serviceName’

发布配置

curl -X POST “http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=nacos.cfg.dataId&group=test&content=HelloWorld”

获取配置

curl -X GET “http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=nacos.cfg.dataId&group=test”

5、关闭

sh shutdown.sh

二、项目使用

1、POM依赖
<!--nacos服务注册和配置文件-->
<dependency>
   <groupId>com.alibaba.cloud</groupId>
   <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<dependency>
   <groupId>com.alibaba.cloud</groupId>
   <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!--SpringBoot 2.4.x的版本之后,对于bootstrap.properties/bootstrap.yaml配置文件
(我们合起来成为Bootstrap配置文件)的支持,需要导入如下的依赖或者使用spring.cloud.bootstrap.enabled=true -->
<dependency>
   <groupId>org.springframework.cloud</groupId>
   <artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
2、bootstrap.yml文件配置
#开启nacos日志
logging:
 level:
   com.alibaba.cloud.nacos.client.NacosPropertySourceBuilder: debug
#对应配置文件名称 ${spring.application.name}-${spring.profiles.active}.${file-extension}
spring:
 profiles:
   active: dev
 application:
   name: nacos-demo
 cloud:
   nacos:
     #服务相关
     discovery:
       server-addr: 192.168.129.128:8848
     #配置文件相关
     config:
       #enabled: false #完全关闭 Spring Cloud Nacos Config
       server-addr: 192.168.129.128:8848
       file-extension: yaml
       group: DEFAULT_GROUP
       namespace: 7f1a800b-6fb5-444e-baf9-ca17a7e3ce76 #不填默认public
3、在nacos控制台创建文件nacos-demo-dev.yaml

image-20221025164901813

4、创建并启动应用
@SpringBootApplication
@EnableDiscoveryClient
public class NacosDemoApplication {

   public static void main(String[] args) {
       ConfigurableApplicationContext applicationContext = SpringApplication.run(NacosDemoApplication.class, args);
       String userName = applicationContext.getEnvironment().getProperty("user.name");
       String userAge = applicationContext.getEnvironment().getProperty("user.age");
       System.err.println("user name :"+userName+"; age: "+userAge);
       String env = applicationContext.getEnvironment().getProperty("current.env");
       System.err.println("current.env value is " + env);
   }
}

出现以下日志说明配置文件加载成功

2022-10-25 16:47:22.580 DEBUG 23088 — [ main] c.a.c.n.c.NacosPropertySourceBuilder : Loading nacos data, dataId: ‘nacos-demo-dev.yaml’, group: ‘DEFAULT_GROUP’, data:
current.env: dev-env
user:
name: ‘哈哈’
age: 15

2022-10-25 16:47:22.584 INFO 23088 — [ main] b.c.PropertySourceBootstrapConfiguration : Located property source: [BootstrapPropertySource {name=‘bootstrapProperties-nacos-demo-dev.yaml,DEFAULT_GROUP’}, BootstrapPropertySource {name=‘bootstrapProperties-nacos-demo.yaml,DEFAULT_GROUP’}, BootstrapPropertySource {name=‘bootstrapProperties-nacos-demo,DEFAULT_GROUP’}]

出现以下日志说明服务注册成功

2022-10-25 16:47:26.230 INFO 23088 — [ main] com.alibaba.nacos.client.naming : [BEAT] adding beat: BeatInfo{port=9000, ip=‘192.168.129.1’, weight=1.0, serviceName=‘DEFAULT_GROUP@@nacos-demo’, cluster=‘DEFAULT’, metadata={preserved.register.source=SPRING_CLOUD}, scheduled=false, period=5000, stopped=false} to beat map.
2022-10-25 16:47:26.230 INFO 23088 — [ main] com.alibaba.nacos.client.naming : [REGISTER-SERVICE] public registering service DEFAULT_GROUP@@nacos-demo with instance: Instance{instanceId=‘null’, ip=‘192.168.129.1’, port=9000, weight=1.0, healthy=true, enabled=true, ephemeral=true, clusterName=‘DEFAULT’, serviceName=‘null’, metadata={preserved.register.source=SPRING_CLOUD}}
2022-10-25 16:47:26.233 INFO 23088 — [ main] c.a.c.n.registry.NacosServiceRegistry : nacos registry, DEFAULT_GROUP nacos-demo 192.168.129.1:9000 register finished

项目启动成功之后,控制台会输入如下值:

user name :哈哈; age: 15
current.env value is dev-env

三、遇见的问题

1、ERROR: Please set the JAVA_HOME variable in your environment, We need java(x64)! jdk8 or later is better! !!

在顶部添加第一环节中的JAVA_HOME,并修改启动方式为单列,其中java环境变量必须得配置成自己的

image-20221021172458143

2、SpringBoot 不识别 bootstrap 文件

SpringBoot 2.4.x的版本之后添加依赖spring-cloud-starter-bootstrap才能识别

3、namespace 填写的是命名空间的ID不是名称

这个id在Nacos控制台命名空间导航栏的列表可以找到

4、加载不到配置文件

去Nacos控制台看一下配置文件Data Id是否正确

组成规则是: s p r i n g . a p p l i c a t i o n . n a m e − {spring.application.name}- spring.application.name{spring.profiles.active}.${spring.cloud.nacos.config.file-extension},不要写错,大小写保持一致

如不指定环境则是nacos-demo.yaml,指定dev环境则是nacos-demo-dev.yaml

Note${spring.profiles.active} 当通过配置文件来指定时必须放在 bootstrap.properties 文件中。

具体参考:https://github.com/alibaba/spring-cloud-alibaba/wiki/Nacos-config

5、连接配置中心的参数需要写在 bootstrap 里面,写在 application 里面无法连接配置中心
6、bootstrap 比 application 先执行,且内容无法覆盖,尽量用bootstrap文件
加载顺序:
bootstrap.yml` > `bootstrap.properties` > `application.yml` > `application.properties
   
一旦bootStrap.yml 被加载,则内容不会被覆盖,即便后期加载的application.yml的内容标签与bootstrap的标签一致,application 也不会覆盖bootstrap,而application.yml 里面的内容可以动态替换
7、Nacos Server地址注意
Notenacos 的地址是本地的话,写127.0.0.1,不写localhost; 注意当你使用域名的方式来访问 Nacos 时,spring.cloud.nacos.config.server-addr 配置的方式为 域名:port。 例如 Nacos 的域名为abc.com.nacos,监听的端口为 80,则 spring.cloud.nacos.config.server-addr=abc.com.nacos:80。 注意 80 端口不能省略。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,我可以为您介绍一下如何在Spring Boot使用Dubbo和Nacos搭建RPC框架。 Dubbo是一个高性能、轻量级的开源Java RPC框架,可以提供远程方法调用和服务发现功能。Nacos是阿里巴巴开源的一个服务发现和配置管理平台,也是Dubbo官方推荐的服务注册中心和配置中心。 下面是具体的步骤: 1. 在pom.xml中添加Dubbo和Nacos的依赖: ```xml <!-- Dubbo依赖 --> <dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>2.7.3</version> </dependency> <!-- Nacos依赖 --> <dependency> <groupId>com.alibaba.nacos</groupId> <artifactId>nacos-client</artifactId> <version>1.2.1</version> </dependency> ``` 2. 在application.properties中配置Dubbo和Nacos: ```properties # Dubbo配置 dubbo.application.name=consumer dubbo.registry.address=nacos://localhost:8848 dubbo.registry.username=nacos dubbo.registry.password=nacos # Nacos配置 spring.cloud.nacos.discovery.server-addr=localhost:8848 spring.cloud.nacos.discovery.username=nacos spring.cloud.nacos.discovery.password=nacos ``` 3. 创建Dubbo服务提供者: ```java @Service public class UserServiceImpl implements UserService { @Override public User getById(Long id) { // 实现自己的业务逻辑 return new User(id, "张三"); } } ``` 4. 在Dubbo服务提供者中配置Dubbo: ```java @Configuration public class DubboProviderConfig { @Value("${dubbo.application.name}") private String appName; @Value("${dubbo.registry.address}") private String registryAddress; @Value("${dubbo.registry.username}") private String registryUsername; @Value("${dubbo.registry.password}") private String registryPassword; @Bean public ApplicationConfig applicationConfig() { ApplicationConfig applicationConfig = new ApplicationConfig(); applicationConfig.setName(appName); return applicationConfig; } @Bean public RegistryConfig registryConfig() { RegistryConfig registryConfig = new RegistryConfig(); registryConfig.setAddress(registryAddress); registryConfig.setUsername(registryUsername); registryConfig.setPassword(registryPassword); return registryConfig; } @Bean public ProtocolConfig protocolConfig() { ProtocolConfig protocolConfig = new ProtocolConfig(); protocolConfig.setName("dubbo"); protocolConfig.setPort(20880); return protocolConfig; } @Bean public ProviderConfig providerConfig() { ProviderConfig providerConfig = new ProviderConfig(); providerConfig.setTimeout(5000); return providerConfig; } } ``` 5. 创建Dubbo服务消费者: ```java @RestController public class UserController { @Reference(version = "1.0.0") private UserService userService; @GetMapping("/user/{id}") public User getUserById(@PathVariable Long id) { return userService.getById(id); } } ``` 6. 在Dubbo服务消费者中配置Dubbo和Nacos: ```java @Configuration public class DubboConsumerConfig { @Value("${dubbo.application.name}") private String appName; @Value("${dubbo.registry.address}") private String registryAddress; @Value("${dubbo.registry.username}") private String registryUsername; @Value("${dubbo.registry.password}") private String registryPassword; @Bean public ApplicationConfig applicationConfig() { ApplicationConfig applicationConfig = new ApplicationConfig(); applicationConfig.setName(appName); return applicationConfig; } @Bean public RegistryConfig registryConfig() { RegistryConfig registryConfig = new RegistryConfig(); registryConfig.setAddress(registryAddress); registryConfig.setUsername(registryUsername); registryConfig.setPassword(registryPassword); return registryConfig; } @Bean public ProtocolConfig protocolConfig() { ProtocolConfig protocolConfig = new ProtocolConfig(); protocolConfig.setName("dubbo"); protocolConfig.setPort(20880); return protocolConfig; } @Bean public ConsumerConfig consumerConfig() { ConsumerConfig consumerConfig = new ConsumerConfig(); consumerConfig.setTimeout(5000); return consumerConfig; } @Bean public NacosDiscoveryProperties nacosDiscoveryProperties() { NacosDiscoveryProperties nacosDiscoveryProperties = new NacosDiscoveryProperties(); nacosDiscoveryProperties.setServerAddr("localhost:8848"); nacosDiscoveryProperties.setUsername("nacos"); nacosDiscoveryProperties.setPassword("nacos"); return nacosDiscoveryProperties; } @Bean public NacosServiceDiscovery nacosServiceDiscovery() { return new NacosServiceDiscovery(); } @Bean public ReferenceConfig<UserService> userServiceReferenceConfig() { ReferenceConfig<UserService> referenceConfig = new ReferenceConfig<>(); referenceConfig.setInterface(UserService.class); referenceConfig.setVersion("1.0.0"); referenceConfig.setCluster("failfast"); return referenceConfig; } @Bean public DubboBootstrap dubboBootstrap() { return DubboBootstrap.getInstance(); } } ``` 这样,我们就成功地在Spring Boot使用Dubbo和Nacos搭建了RPC框架。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

滚动的小薯条

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值