近期由于搭建公司整套测试环境中使用Docker 容器化部署Dubbo一直出现找不到服务提供者
经过两天断断续续的摸索以及资料(说到这理要落泪了)的查询该问题得意解决这就是本次要扯的内容。
一 、配置项及服务注册流程
本次 dubbo 服务 是以docker-compose进行服务编排部署,服务者与消费者也在同一个Java 工程目录下
工程目录
1.1 工程配置如下:
-
服务提供者配置截图
服务提供者 -
消费者配置截图
消费者配置
1.2 注册流程
当我们服务者工程开启的时候会在Nacos中服务列表中产生新的一项接口其内容是这样的,根据下方的图片可以很清楚的看到IP及端口是不是有点似曾相识的感觉呢,特别是20880端口!
到这里我就兜圈子了。其实IP 就是我们当前服务提供者所在的IP而端口则是dubbo的默认端口,默认使用-1端口就是 20880,消费者正是根据Nacos所提供出来的IP等等信息去查找相对应的服务提供者,如果都只是使用本地局域网并消费者与服务提供者都属于同一个网段下能够相互ping通倒也没什么问题提供者能够被正常的找到。
配置
然而我们都知道Docker本身有四种网络模式,我这边刚好使用的是自己创建的bridge模式并且IP也都是自行配置的。这就直接导致到我服务提供者所提供的IP是docker的内部IP,对于外界讲根本不可能找到服务提供者的IP (于是我就在这里折腾了1天的时间)认认真真的去看了Github中的Issues并从中找到的答案(这是翻译过后的截图)
github 截图
于是我就按照以上所说的对docker-compose配置文件做了配置,截图如下:
docker-compose 配置
接下来就是:启动服务提供者 -> 启动消费者
终于正常启动了(欢呼~给自己加个鸡腿)截止到目前位置我都是使用同一台服务器同一个docker,并且docker 网络是自行创建的 内部是可以做到网络互通的。当我打算把消费者迁移到另外一台服务器时服务提供者又扑街了令人烦恼的
No provider available for the service
又来了。
二、让不同服务器Docker之间也能找到服务提供者并运行起来
又经历了一资料的查询之后,我发现20800端口并没有被我映射出来。于是我把服务提供者配置文件改这样:
生产者配置截图消费者配置文件改成这样
消费者配置截图 消费者正常注册并找到服务提供者截图
终于在我本地以及不同的服务器之间可以正常运行了!
三 、结言
其实如果不在测试环境上遇到这些问题以后在生产环境上也同样会遇到,我们能做的就是在问题到来之前做一定的知识储备避免一些常见的坑。
网友评论