V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
RedBeanIce
V2EX  ›  Java

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

  •  
  •   RedBeanIce · 2022-12-06 14:51:24 +08:00 · 978 次点击
    这是一个创建于 499 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

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

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

    长链接。
    lazyfighter
        3
    lazyfighter  
       2022-12-06 14:59:24 +08:00   ❤️ 1
    broker 是存储消息的,一般还有一方负责协调各个 broker , 无论你作为生产者还是消费者都是跟《协调者》进行交互,协调者会告诉你 broker 的地址,然后客户端直接跟 broker 进行交互,也就是 broker 跟你的客户端也需要网络通才行,推拉很简单,broker push 消息到你的消费者就是推模式,client 定时拉去消息到客户端这就是拉模式
    RedBeanIce
        4
    RedBeanIce  
    OP
       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
        5
    dextercai  
       2022-12-08 15:37:42 +08:00
    理解有一点偏误。不管是推模型还是拉模型,前提都是 Client 连到 Broker 建立长连接。

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

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

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

    对于 mq 的 consumer 以及 broker 来说,那就是一个 http keetp-alive 的长连接!!在这个链接里面进行推送数据。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2904 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 15:12 · PVG 23:12 · LAX 08:12 · JFK 11:12
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.