roydon_ 2024-03-29 19:16 采纳率: 79.2%
浏览 11

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

项目为springcloud微服务项目,现在有三台服务器部署其中的几个微服务,注册与配置中心为nacos。

部署之后gateway能正常路由每个微服务,因为nacos配置的真实公网ip,但dubbo调用失败,dubbo却调用的内网ip,这是为什么呢,我需要做什么配置吗。

img

  • 写回答

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代理访问该服务时,由于端口被映射到了本地内网,你无需手动配置网络信息就能直接访问。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 3月29日

悬赏问题

  • ¥100 iOS开发关于快捷指令截屏后如何将截屏(或从截屏中提取出的文本)回传给本应用并打开指定页面
  • ¥15 unity连接Sqlserver
  • ¥15 图中这种约束条件lingo该怎么表示出来
  • ¥15 VSCode里的Prettier如何实现等式赋值后的对齐效果?
  • ¥15 流式socket文件传输答疑
  • ¥20 keepalive配置业务服务双机单活的方法。业务服务一定是要双机单活的方式
  • ¥50 关于多次提交POST数据后,无法获取到POST数据参数的问题
  • ¥15 win10,这种情况怎么办
  • ¥15 如何在配置使用Prettier的VSCode中通过Better Align插件来对齐等式?(相关搜索:格式化)
  • ¥100 在连接内网VPN时,如何同时保持互联网连接