• dubbo+nacos服务器部署调用失败


    关注 码龄 粉丝数 原力等级 -- 被采纳 被点赞 采纳率 roydon_ 2024-03-29 19:16 采纳率: 79.2% 浏览 8 首页/ 云计算 / dubbo+nacos服务器部署调用失败 spring cloudjava微服务 项目为springcloud微服务项目,现在有三台服务器部署其中的几个微服务,注册与配置中心为nacos。 部署之后gateway能正常路由每个微服务,因为nacos配置的真实公网ip,但dubbo调用失败,dubbo却调用的内网ip,这是为什么呢,我需要做什么配置吗。 收起 写回答 好问题 0 提建议 追加酬金 关注问题 微信扫一扫 点击复制链接 分享 邀请回答 编辑 收藏 删除 结题 收藏 举报 追加酬金 (90%的用户在追加酬金后获得了解决方案) 当前问题酬金 ¥ 0 (可追加 ¥500) ¥ 15¥ 20¥ 50¥ 100¥ 200 支付方式 扫码支付 二维码出错 点击刷新 支付金额 15 元 提供问题酬金的用户不参与问题酬金结算和分配 支付即为同意 《付费问题酬金结算规则》 结题 再想想 删除 再等等

    3条回答 默认 最新

    • 专家-赤兔[在线] 全栈领域优质创作者 2024-03-29 19:16
      关注

      引自免费微信小程序:皆我百晓生

      在Dockerfile中配置Dubbo的内网通信时,我们可以通过设置COM_DUBBO_NETWORK_TYPE=native来启用内网通讯。这样,无论服务是否在内网中运行,都可以通过网络获取并发送请求,从而解决Dubbo内部通信问题。

      以下是一个简单的Dockerfile示例,用于将 Dubbo 配置用于内网环境,并展示如何配置 COM_DUBBO_NETWORK_TYPE=native-Dcom_dubbo_port=20880 参数。

      FROM spring-cloud/spring-boot-starter-web
      COPY pom.xml /pom.xml
      WORKDIR /app
      EXPOSE 8080
      ENTRYPOINT ["java", "-jar", "target/my-service.jar"]
      VOLUME /data
      

      在这个Dockerfile中,我们从Spring Cloud Spring Boot starter web 中复制POM.xml 文件到 /app/pom.xml 目录中,并将端口号(8080)映射到外部主机的相应端口。

      然后,在 Dockerfile 的结尾处,我们设置启动端口为 8080,这表示Dubbo会监听这个端口进行客户端的请求交互。接下来,我们将服务容器化在镜像上,这意味着服务的运行依赖于构建整个 Docker 容器的工作。

      对于 COM_DUBBO_NETWORK_TYPE=native 参数,我们需要将 network_mode=native 设置为启用了默认的网络模式(TCP),即让Docker容器连接到内部网络中的其他Docker容器。这是因为nacos通常会提供一个公共的地址(如8.8.8.8 或者 443)作为它们的服务注册中心的域名解析地址,而这些DNS解析地址通常是内部网络地址,而不是外部公网IP地址。

      对于 -Dcom_dubbo_port=20880 参数,这是一个Docker Compose命令行选项,用于指定Docker服务的端口,这里将其设置为本地内网的端口,即20880。这意味着一旦服务启动,就可以通过该端口对外部网络中的其他Docker容器发送HTTP请求。

      要确保COM_DUBBO_NETWORK_TYPE=native-Dcom_dubbo_port=20880参数生效,你需要在Docker-compose.yml文件中定义上述服务及其依赖,并添加相应的端口映射:

      services:
        my-service:
          image: your-docker-image-name
          ports:
            - "8080:8080"
          environment:
            - com_dubbo_network_type=native
            - com_dubbo_port=20880
          networks:
            - default
      

      在这个例子中,your-docker-image-name 是你的Docker镜像名称,8080 是服务端口。当你创建Docker-compose.yml文件后,通过以下命令启动Docker-compose服务:

      docker-compose up
      

      这将在所有运行的Docker容器上启动服务,并将端口映射到外部IP地址。如果你使用的是Nginx作为代理转发器,那么通过修改Nginx配置文件(例如 /etc/nginx/sites-available/nyu-nacos.conf),可以允许外部访问MyService服务的8080端口:

      location /my-service {
          proxy_pass http://localhost:20880;
      }
      

      至此,你的Docker部署将基于Docker Compose和nacos服务注册中心实现了内网通信。通过COM_DUBBO_NETWORK_TYPE=native参数,Dubbo和nacos之间的连接不再受Docker本身的网络限制,而是跨越了Docker容器内的私有网络,实现了一种无网络限制的通信方式。当你使用Docker代理访问该服务时,由于端口被映射到了本地内网,你无需手动配置网络信息就能直接访问。

      展开全部

      评论 编辑记录
    • 码农阿豪 Java领域优质创作者 2024-03-29 19:16
      关注
      让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
      问题描述:在springcloud微服务项目中,网关可以成功路由到各个微服务,但是dubbo调用却使用内网ip而非真实公网ip,导致调用失败。 解决方案:
      1. 修改Nacos配置 检查Nacos配置是否正确,包括主机名和端口号,以及是否开启了nacos.data-protect 配置。确保Nacos配置中心启动在公网上并可访问。
      2. 修改Dubbo配置 在Dubbo的属性配置文件中,检查dubbo.protocol.host 属性和dubbo.protocol.port 属性是否正确设置。确保Dubbo的代理服务采用与Nacos配置中心相同的主机名和端口号。例如:
      dubbo.protocol.host = xxx.xxx.xxx.xxx
      dubbo.protocol.port = 20880
      
      1. 配置服务注册 使用spring.cloud.nacos.discovery.server-addr属性来指定Nacos服务注册中心的地址。例如:
      spring.cloud.nacos.discovery.server-addr=xxx.xxx.xxx.xxx:8848
      
      1. 检查网络环境 要确保所用的网络环境允许外部访问内部ip,例如,公共网络或VPN。 案例: 在 application.properties 文件中,设置以下属性:
      #Dubbo protocol configuration
      dubbo.protocol.name=dubbo
      dubbo.protocol.port=20880
      dubbo.protocol.host=192.168.0.10
      #Nacos configuration
      spring.cloud.nacos.discovery.server-addr=192.168.0.11:8848
      

      在该示例中,Dubbo具有属性配置文件,并设置了dubbo.protocol.host属性。Nacos配置中心通过属性“spring.cloud.nacos.discovery.server-addr”指定为192.168.0.11:8848。这确保了Dubbo和Nacos配置中心具有相同的主机名和端口号。

      评论
    • CSDN-Ada助手 CSDN-AI 官方账号 2024-03-29 23:15
      关注

      【相关推荐】




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

    报告相同问题?

  • 相关阅读:
    【总结】使用livy 提交spark任务时报错Connection refused
    时间复杂度计算超全整理!!(数据结构和算法的第一步
    IC Compiler指南——数据准备
    Dataset 的基础知识和RDD转换为DataFrame
    《互联网的世界》第三讲-tcp
    【递归】:原理、应用与案例解析 ,助你深入理解递归核心思想
    one-model引擎:私域营销推荐自动化解决方案【转载】
    数据库基础---SQL语句(基于sql server的笔记)
    深度学习预备知识(线性代数)
    【力扣】从零开始的动态规划
  • 原文地址:https://ask.csdn.net/questions/8081125