试试先生 2023-09-12 21:16 采纳率: 33.3%
浏览 182
已结题

服务在nacos注册成功后,无法通过服务名访问,如何解决?(语言-java)

服务在nacos注册成功后,无法通过服务名访问

在例如user-service在nacos注册成功后 保存了ip地址192.168.68.68:11001
此时发起GET http://localhost:11001/login 能正常访问
如果改为 GET http://user-service/login 则访问失败,nacos无异常报错

访问网络正常,ping localhost正常

关于nacos的配置,只设置了这一条

spring.cloud.nacos.discovery.server-addr=localhost:8848

与版本无关nacos的1.4.1,1.4.2,2.0.3 这仨版本都试了,都不行网卡也重装了,电脑也重启了,hosts文件也重置了,折腾一天了没办法了

不排除其他原因

  1. 修改过电脑用户名,把中文用户名修改为英文
  2. 家里停过电,断电式关机

第二天

使用 spring-cloud-starter-alibaba-nacos-config 会报错
配置

spring:
  cloud:
    nacos:
      config:
        server-addr: localhost:8848
        file-extension: yaml
  application:
    name: user-service
  profiles:
    active: dev
# user-service-dev.yaml


异常

java.lang.IllegalStateException: Error processing condition on org.springframework.cloud.commons.httpclient.HttpClientConfiguration$ApacheHttpClientConfiguration.apacheHttpClientBuilder

需要导入 httpclient 才能连接

        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
            <version>4.5.3</version>
        </dependency>

能读取远程配置
能通过 http://localhost:11001/hello 访问
不能通过 http://user-servcie/hello 访问

img

img

  • 写回答

2条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-09-13 08:40
    关注

    【以下回答由 GPT 生成】

    问题分析

    根据问题描述,服务在nacos注册成功后,无法通过服务名进行访问。在通过服务名访问时会失败,并且nacos没有报错信息。已经确认网络连接正常,可以正常ping localhost。关于nacos的配置,只设置了spring.cloud.nacos.discovery.server-addr=localhost:8848这一项。尝试了不同版本的nacos(1.4.1,1.4.2,2.0.3),重新安装了网卡,重启了电脑,重置了hosts文件,但问题仍然存在。

    额外信息包括修改过电脑用户名和曾经停电过导致电脑突然关机。

    根据问题描述和额外信息,我们可以进行以下排查和解决尝试。但需要注意,由于问题较为复杂,并且未能提供完整的代码和环境信息,以下只是一些可能的解决方案和排查建议。

    解决方案

    1. 检查服务名是否正确注册到nacos。

    2. 确保服务名和服务实例的注册、注销过程正确。

    3. 可以通过nacos的控制台或API查看服务列表,确认user-service是否成功注册。

    4. 检查服务注册的元数据配置是否正确。

    5. nacos的注册中心可以为服务注册元数据,包括ip地址、端口等信息。确认user-service注册的元数据是否正确,特别是ip地址和端口是否与实际服务部署的地址一致。

    6. 确认服务端口是否被占用或防火墙限制。

    7. 确认服务部署的端口是否被其他进程占用。可以使用netstat命令或其他端口查看工具来检查端口占用情况。

    8. 确认成功访问的http://localhost:11001/login端口是否是服务启动的端口,与注册到nacos的端口一致。
    9. 检查本地防火墙设置,确保端口没有被防火墙阻止。

    10. 检查服务实例的网络配置是否正确。

    11. 确保服务部署的机器的网络配置正确,特别是IP地址和网关设置。

    12. 确保电脑的网卡没有出现异常,检查网卡驱动程序是否正确安装或需要更新。

    13. 检查nacos的配置是否正确。

    14. 确认nacos的配置文件中server-addr配置是否正确,确保注册中心的地址和端口与实际一致。

    15. 检查nacos的日志信息,确认是否有相关问题的报错信息。

    16. 尝试使用服务发现功能。

    17. 使用DiscoveryClient或相关工具,查询服务名是否成功获取到对应的服务实例。

    18. 确认获取到的服务实例是否包含正确的IP地址和端口。

    19. 检查电脑用户名修改和停电过关机的影响。

    20. 确认修改电脑用户名是否正确完成,可能需要检查与服务相关的配置文件中是否正确设置了用户名。

    21. 停电过关机可能会对系统文件和配置文件造成影响,可以尝试重新安装相关组件,或者备份配置文件后重置相关组件的配置。

    22. 检查代码实现和依赖库的配置与代码中是否一致。

    23. 确认代码中是否正确使用了服务名进行访问,而非硬编码的IP地址。

    24. 确认使用的依赖库是否正确配置了服务注册和服务发现的相关功能。

    结论

    根据问题描述和提供的额外信息,可以通过以上解决方案进行排查和尝试解决问题。但由于问题较为复杂,可能需要更多的信息和具体代码实现才能进一步排查和解决问题。以上解决方案仅供参考,请根据具体情况进行调试和排查,或者向相关社区或开发者寻求帮助。


    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 9月14日
  • 修改了问题 9月13日
  • 创建了问题 9月12日