docker-compose 部署 NSQ 踩坑记录

2020年12月31日 0 条评论 1.73k 次阅读 0 人点赞

前言

我的 nsq 使用 docker-compose 部署在云服务器上,但是我的程序在本地机器想连通云服务器上的nsq。

云服务器上的 docker-compose.yml 文件如下所示

本地的 Golang 代码如下所示

当我运行Go程序时,好巧不巧,在订阅数据处直接报了一个网络连接错误

从上面的报错中,我很明显的看到了创建主题是成功的,但是订阅主题失败了。

原因分析

我们创建主题时,直连的是我云服务器的公网 IP ,也就是 nsqd 节点所在的机器。因此有公网 IP 的存在,创建主题是成功的。

但是订阅数据时,其内部逻辑是先访问 nsqlookupd 询问 nsqd 所在节点的主机地址 ,再而通过 nsqllookupd 注册中心把 nsqd 节点所在的 host 返回给我的本地主机。

最后我本地主机二次通过该 host 去获取订阅数据。

请注意重点来了!!!!

由于我用的是 dokcer-compose 部署,因此返回的 nsqd 所在的 host 直接就是 nsqd 。然而我的本地又没有 DNS 解析,所以就造成了这个戏剧性的场面。如下图所示:

最终解决方案有三种:

、本地调试,修改自己的 hosts ,把 nsqd 指向所在服务的 IP 地址。

二、或者修改docker-compose.yml文件,将广播地址直接改成真实的公网地址。(推荐用这种)

三、或者将应用程序直添加进docker-compose所在的服务集群中,这样就不会再因为dns无法解析而导致无法连接服务的问题。如下图所示

兰陵美酒郁金香

大道至简 Simplicity is the ultimate form of sophistication.

文章评论(0)

你必须 登录 才能发表评论