开发者社区 问答 正文

Nacos+dubbo提供者与消费者不在同一机器上

各位大佬好,我想把dubbo服务提供者部署到阿里云上,然后在本地运行服务消费者,试了好多网上的方法,都不管用。阿里的安全组也放行了。

我用docker-compose部署的,而且设置了ip与端口,配置如下: (我也试过docker-compose中不配置environment,不行。)

version: '3.1'
services:
  provider-ucenter:
    build: ./provider-ucenter/
    image: provider-ucenter:1.0.0
    restart: always
    container_name: provider-ucenter
    environment:
      DUBBO_IP_TO_REGISTRY: 39.105.137.237
      DUBBO_PORT_TO_REGISTRY: 8500
    ports:
      - "8500:8500"
  provider-message:
    build: ./provider-message/
    image: provider-message:1.0.0
    restart: always
    container_name: provider-message
    environment:
      DUBBO_IP_TO_REGISTRY: 39.105.137.237
      DUBBO_PORT_TO_REGISTRY: 8530
    ports:
      - "8530:8530"

运行后,nacos控制台显示服务均上线: image.png 而且各服务的IP,端口都正确,如userservice: image.png 然后,我在本地跑服务消费者,报错:

org.apache.dubbo.remoting.RemotingException: client(url: dubbo://39.105.137.237:8500/com.supermarket.manage.provider.api.ucenter.UserService?anyhost=true&application=business-cloud&bean.name=ServiceBean:com.supermarket.manage.provider.api.ucenter.UserService:1.0.0&category=providers&check=false&codec=dubbo&deprecated=false&dubbo=2.0.2&dynamic=true&generic=false&heartbeat=60000&interface=com.supermarket.manage.provider.api.ucenter.UserService&lazy=false&methods=getCountByPhone,getUserByUsername,bindPhone,updatePasswordById,getCountByUsername,insertUser,updateUserById,untiePhone,getUsernameByUserId,userLoginByUsername,getUserByUserId,getUserByBuyerId,register&path=com.supermarket.manage.provider.api.ucenter.UserService&pid=3176&protocol=dubbo&qos.enable=false&register=true&register.ip=192.168.18.1&release=2.7.3&remote.application=provider-ucenter&revision=1.0.0&serialization=kryo&side=consumer&sticky=false&timeout=5000&timestamp=1584871255294&version=1.0.0) failed to connect to server /39.105.137.237:8500, error message is:Connection refused: no further information: /39.105.137.237:8500

但是把提供者和消费者放在同一个服务器上就能成功。 请问大佬们有没有什么好的建议

遇到了同样的问题,在CSDN看到了,希望阿里云团队能够给出正确、标准的答案~请查看

展开
收起
刘刚_ 2020-05-22 21:19:08 1819 分享 版权
阿里云 AI 助理回答

遇到这个问题,可能有几个方面需要检查和考虑:

  1. 网络连通性:虽然您提到已经设置了安全组规则,但请确保阿里云ECS的安全组确实放行了相应的端口(8500 和 8530),并且是针对公网IP的入方向。同时,从本地到阿里云服务器的网络路径上没有其他防火墙或网络设备阻止访问。

  2. Dubbo注册中心配置:确认您的服务提供者是否正确地向Nacos注册中心注册。在您的Docker Compose文件中,我注意到您直接设置了DUBBO_IP_TO_REGISTRY环境变量,这通常用于指定服务注册时使用的IP地址。但是,正确的做法应该是通过Dubbo的配置来指定注册中心地址、协议等信息,而不是直接设置IP和端口为注册中心地址。您应该在应用的配置文件中(如application.properties或dubbo.properties)配置Nacos作为注册中心,并确保服务提供者和服务消费者都指向同一个Nacos实例。

  3. 服务消费者的配置:在本地运行的服务消费者需要能够访问到远程的注册中心并根据注册信息调用服务。请检查服务消费者的Dubbo配置,确保它指向了正确的Nacos地址,并且使用的是正确的服务地址(通常是注册中心提供的服务地址,而非直接指定服务提供者的IP和端口)。

  4. 端口映射与服务暴露:您在Docker Compose中将服务容器的端口映射到了宿主机的相同端口,但这并不意味着服务就是通过这些端口对外提供服务的。Dubbo服务的端口配置应遵循Dubbo本身的配置逻辑,比如通过Dubbo协议配置暴露的端口。如果服务监听的不是宿主机暴露的端口,那么直接使用宿主机IP加端口的方式可能无法连接成功。

  5. 日志分析:查看服务提供者和消费者以及Nacos服务端的日志,可能会有更详细的错误信息帮助定位问题。特别是Dubbo和Nacos的日志,可能会记录下连接失败的具体原因。

  6. DNS解析:如果服务消费者通过域名访问服务提供者,确保域名解析正确无误,尤其是在混合云或跨网络环境中。

建议您先从上述几个方面进行排查,调整配置后再次尝试。如果问题依旧,请提供更多详细日志信息以便进一步分析。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答