【难受】SpirngBoot-Alibaba-nacos跨服务器访问接口的问题

原想法:我首先准备了 一个网关 2个服务 分别将两个服务部署到不同的远程服务器当中 实现跨服务器访问接口

网关为本地调用--这里就不一一介绍了

问题

利用gateway做路由时出现服务不可用的情况,看日志发现服务调用的IP是172开头的网卡段,但是由于是不同的服务器,

这个地址是访问不了的,因此需要修改配置调整网卡的选择或者指定IP

相信到这里就应该知道直接使用内网 是访问不了服务器接口的 这里我们查看nacos服务里面的ip就是内网

错误 为调用超时 500

解决方案

在被调用的服务当中的yml配置 nacos注册ip公网地址

然后重新启动服务 进行通过网关跨服务器调用接口服务 成功!!!

到此问题结束完毕

其他配置

spring.cloud.nacos.discovery.server-addr  #Nacos Server 启动监听的ip地址和端口
spring.cloud.nacos.discovery.service  #给当前的服务命名
spring.cloud.nacos.discovery.weight  #取值范围 1 到 100,数值越大,权重越大
spring.cloud.nacos.discovery.network-interface #当IP未配置时,注册的IP为此网卡所对应的IP地址,如果此项也未配置,则默认取第一块网卡的地址
spring.cloud.nacos.discovery.ip  # 优先级最高
spring.cloud.nacos.discovery.port  # 默认情况下不用配置,会自动探测
spring.cloud.nacos.discovery.namespace # 常用场景之一是不同环境的注册的区分隔离,例如开发测试环境和生产环境的资源(如配置、服务)隔离等。

spring.cloud.nacos.discovery.access-key  # 当要上阿里云时,阿里云上面的一个云账号名
spring.cloud.nacos.discovery.secret-key # 当要上阿里云时,阿里云上面的一个云账号密码
spring.cloud.nacos.discovery.metadata    #使用Map格式配置,用户可以根据自己的需要自定义一些和服务相关的元数据信息
spring.cloud.nacos.discovery.log-name   # 日志文件名
spring.cloud.nacos.discovery.enpoint   # 地域的某个服务的入口域名,通过此域名可以动态地拿到服务端地址
ribbon.nacos.enabled  # 是否集成Ribbon 默认为true
### Spring Boot 集成 spring-cloud-starter-alibaba-nacos-config 教程 #### 1. 添加 Maven 依赖 为了在项目中集成 Nacos Config,需在 `pom.xml` 文件中引入以下两个核心依赖: ```xml <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> <version>${nacos.version}</version> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> <version>${nacos.version}</version> </dependency> ``` 注意版本号的选择应与当前使用的 Spring Cloud 和 Spring Boot 版本兼容[^2]。 --- #### 2. 配置 application.properties 或 bootstrap.properties 由于 Spring Cloud Alibaba 使用 Nacos 进行动态配置管理,默认情况下需要通过 `bootstrap.properties` 来加载配置中心的信息。如果使用的是 Spring Cloud 2020.x 及以上版本,则不再支持 `bootstrap.properties` 文件,建议改为 `application.yml` 并手动初始化配置上下文。 以下是典型的 `bootstrap.properties` 配置示例: ```properties spring.application.name=demo-service spring.cloud.nacos.config.server-addr=127.0.0.1:8848 spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848 ``` 对于更高版本的 Spring Cloud,推荐使用以下方式替代: ```yaml spring: cloud: nacos: config: server-addr: 127.0.0.1:8848 file-extension: yaml discovery: server-addr: 127.0.0.1:8848 ``` --- #### 3. 启动类注解 确保启动类上添加了必要的注解来启用服务注册和动态配置功能: ```java import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; @SpringBootApplication @EnableDiscoveryClient public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } } ``` --- #### 4. 解决 NoClassDefFoundError 错误 当遇到 `java.lang.NoClassDefFoundError: com/alibaba/nacos/api/config/ConfigService` 错误时,通常是因为缺少 Nacos API 的相关依赖或者版本冲突引起的。可以通过以下方法排查和解决问题: ##### (1) 检查依赖是否正确导入 确认 `pom.xml` 中已包含以下依赖项,并且版本一致: ```xml <dependency> <groupId>com.alibaba.nacos</groupId> <artifactId>nacos-client</artifactId> <version>${nacos.version}</version> </dependency> ``` 如果没有显式声明该依赖,可能需要手动添加它以避免运行时异常[^1]。 ##### (2) 排查版本冲突 检查项目的依赖树是否存在多个不同版本的 Nacos 客户端库。可以使用以下命令查看依赖关系: ```bash mvn dependency:tree | grep nacos ``` 如果有重复或不匹配的版本,请调整 POM 文件中的 `<exclusions>` 节点排除不必要的依赖。 ##### (3) 清理缓存并重新构建 执行以下操作清理本地缓存并强制更新依赖: ```bash mvn clean install -U ``` --- #### 5. 测试验证 完成上述配置后,可通过访问 `/actuator/health` 或自定义接口测试配置是否生效。例如,在控制器中注入一个属性值并返回给前端: ```java @RestController @RequestMapping("/config") public class ConfigController { @Value("${custom.key:default}") private String customKey; @GetMapping("/test") public String test() { return "Custom Key Value: " + customKey; } } ``` Nacos 控制台中创建对应的配置文件(如 `demo-service.yaml`),设置键值对即可实时刷新应用内的变量[^5]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值