请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

provider部署在云服务器上时,api会启动失败,连接不上provider

qiyu-live-user-provider服务部署在本地,qiyu-live-api就能启动成功,可以在dubbo中找到user-provider,但是当把qiyu-live-user-provider部署在服务器上时,qiyu-live-api就启动失败,连不上qiyu-live-user-provider(将provider服务部署在docker中也出现同样的问题)

环境信息:
qiyu-live-api 本地
qiyu-live-user-provider 云服务器1 jar 部署
nacos:云服务器2
两个云服务器端口均已全部开放,内部防火墙全部关闭

第一张:qiyu-live-user-provider,服务已启动
图片描述
第二张:nacos服务中心已注册成功(qiyu-live-user-provider)
图片描述
第三张:本地qiyu-live-api启动失败
图片描述

补充:我试着将qiyu-live-api和qiyu-live-user-provider部署在同一台云服务器上,则qiyu-live-api可以正常启动,并能正常访问,但是部署在不同的云服务器上(一台阿里、一台腾讯),则qiyu-live-api不能正常启动

正在回答

1回答

这是个好问题,老师之前也有遇到过一个类似的。

首先你要查看下nacos中注册的dubbo地址,是不是变成了docker容器的ip地址,如果是的话,你本地的服务应该是不能直接通过公网去访问云端的docker地址的,这里你可以通过设置docker启动的时候,将宿主机的ip注册到nacos上。

这块可以参考老师在qiyu-live-user-provider项目中的docker-compose.yaml文件的对于dubbo注册参数的配置:

https://img1.sycdn.imooc.com//szimg/651fc9110965d1f915131126.jpg

0 回复 有任何疑惑可以回复我~
  • 提问者 九五七叶 #1
    老师,我按照你的方法试了,公网ip添加上确实是可以的,但是这样就写死了,如果我想用这个镜像部署多台机器,却不可行
    关于非java -jar 部署,我查到了一种办法
    1、先给机器在/etc/profile中设置一个环境变量 export -DDUBBO_IP_TO_REGISTRY="42.192.***.198",
    "42.192.***.198" 为本地的公网地址
    2、使用 java -jar -DDUBBO_IP_TO_REGISTRY=${DDUBBO_IP_TO_REGISTRY}  app.jar 启动,就可以实现一个jar包,处处部署
    
    但是docker中怎样才能使用这个变量呢
    
    我试了用 docker run -e DDUBBO_IP_TO_REGISTRY=${DDUBBO_IP_TO_REGISTRY} -p 9090:9090 imageName 将本地环境变量同步到 container 容器中,然后在 打包docker镜像时设置了 
    -DDUBBO_IP_TO_REGISTRY=${DDUBBO_IP_TO_REGISTRY}
    然后在启动容器的日志中,发现向dubbo注册的地址为 ${DDUBBO_IP_TO_REGISTRY},日志为:
    [DUBBO] Export dubbo service org.apache.dubbo.metadata.MetadataService to url dubbo://${DDUBBO_IP_TO_REGISTRY}:9090
    
    所以有什么办法能解决docker的一次镜像打包,处处部署的问题吗
    回复 有任何疑惑可以回复我~ 2023-10-06 23:01:22
  • Danny_Idea 回复 提问者 九五七叶 #2
    建议可以考虑上k8s,更加简单。https://github.com/apache/dubbo/issues/11141这里已经有人讨论过类似的问题了,可以看看。
    回复 有任何疑惑可以回复我~ 2023-10-07 21:56:52
  • 提问者 九五七叶 回复 Danny_Idea #3
    好的,谢谢老师
    回复 有任何疑惑可以回复我~ 2023-10-08 20:34:28
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信