[mq 的消费者与 broker 之间的联系] 问题无法简单描述,请看正文

2022-12-06 14:51:24 +08:00
 RedBeanIce

假如我在家里,且没有申请公网 IP ,那么在家里的电脑上写得代码,都是处理一个 NAT 的网络环境

以下操作,默认,在家里的,NAT 的网络下,进行

假如我在电脑上写了一个服务,有两个方法,一个是生产者( sendMqMsg ,topic 是 test-mq ),一个消费者( consumerMqMsg ,topic 和上面的对应)

这个服务上面,链接的是云厂商的 mq ,这个 mq 是肯定有公网 ip 的。( mq 可以是 mqtt ,rabbitmq ,kafka ,rocketmq 等)

(之前看 rocketmq 的代码,好像有推模型和拉模型,但是我不理解)

总结以上描述的重点:mq 的 broker 是怎么精准的把消息发到我的服务里面的呢,,我的服务明明是一个 NAT 的网络环境。外部应该不能够直接调用来咋。。

988 次点击
所在节点    Java
6 条回复
vitoliu
2022-12-06 14:56:54 +08:00
别想那么多复杂的问题,只要你能连 broker 的网,建立长连接后直接就能推送接收
Chad0000
2022-12-06 14:58:09 +08:00
你手机在 nat 里微信还不是实时推送消息给你了。

长链接。
lazyfighter
2022-12-06 14:59:24 +08:00
broker 是存储消息的,一般还有一方负责协调各个 broker , 无论你作为生产者还是消费者都是跟《协调者》进行交互,协调者会告诉你 broker 的地址,然后客户端直接跟 broker 进行交互,也就是 broker 跟你的客户端也需要网络通才行,推拉很简单,broker push 消息到你的消费者就是推模式,client 定时拉去消息到客户端这就是拉模式
RedBeanIce
2022-12-07 12:52:39 +08:00
@vitoliu
@Chad0000
@lazyfighter

得到一个这样的答案

白烟染黑墨 2022/12/6 14:55:38
你客户端不是要主动连接服务端吗?

想写 im 的 雪糕 2022/12/6 14:56:25
你的意思是 http 通过长链接或者心跳,等 http 手段处理的么?

白烟染黑墨 2022/12/6 14:57:01
只要是 TCP 就可以

白烟染黑墨 2022/12/6 14:57:10
udp 不保证

想写 im 的 雪糕 2022/12/6 14:58:18
大佬有个问题,你的家庭是 nat 网络,,,,,,,,远在云服务商服务器,是如何调用处于 nat 网络的你的呢

白烟染黑墨 2022/12/6 14:59:51
你需要去看 TCP/IP 网络相关的书籍,有个 NAT 映射表的,出去的时候会建立,回来的时候只要这个表还在就可以通讯。

白烟染黑墨 2022/12/6 15:00:18
你是计算机专业的吗

想写 im 的 雪糕 2022/12/6 15:00:39
计网知识缺乏

Touch Sky 2022/12/6 15:00:54
可以了解一下 iptables

想写 im 的 雪糕 2022/12/6 15:01:03
收到

想写 im 的 雪糕 2022/12/6 15:01:05
我去了解下

Touch Sky 2022/12/6 15:01:11
三层网络转发

想写 im 的 雪糕 2022/12/6 15:02:29
我去详细找找 nat 的知识。。感谢。
dextercai
2022-12-08 15:37:42 +08:00
理解有一点偏误。不管是推模型还是拉模型,前提都是 Client 连到 Broker 建立长连接。

简单点来说:推模型是订阅 topic 之后,服务器主动在这个长连接里面给你推数据;而拉模型是相当于请求对应的 topic ,服务器再给你传过来。

换句话来说,对线上的 Broker ,不需要处理“怎么找到你的服务”或者“怎么连接到你的服务”这个问题,因为所有的操作都是建立在你和 Broker 的长连接的前提下。

你贴的这个聊天记录,讲的是在 NAT ( IP Masquerade )网络环境下,怎么去保持这样的一个 TCP 连接的,对应的网络设备上会维护一个 NAT 表项,对于 UDP 和 TCP 会有不同的保活机制、超时时长。和应用层上的消息队列没啥太大关系。
RedBeanIce
2022-12-08 20:39:06 +08:00
@dextercai 感谢回复,我去去了解一下。

对于 mq 的 consumer 以及 broker 来说,那就是一个 http keetp-alive 的长连接!!在这个链接里面进行推送数据。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/900502

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX