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

ZMQ proxy 跑一段时间之后,后台收不到数据

  •  
  •   V2WT · 2018-07-11 16:26:20 +08:00 · 2940 次点击
    这是一个创建于 2088 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如题,用的是 zmq 4.0.4 采用的模式是这样的:

    client			master			worker
    

    ZMQ_DEALER <---> (ZMQ_ROUTER, ZMQ_DELEAR) <---> ZMQ_DEALER

    client, master,worker 为不同的进程。 client 与 master 为两个不同的机器,采用 tcp 通信。 master 与 worker 在同一台机器上,也采用 tcp 通信,因为 zmq 的 ipc 机制在 windows 上不支持。

    因为客户端需要保证不阻塞,所以采用的是 DEALER 类型的 zmq_socket。

    现在的问题是这样的: 程序刚开始跑一切正常,但是跑了一段时间(具体时间不确定,可能二三十分钟,可能几个小时),这之间传递的数据是循环的,大概 20 分钟一循环。 之后 master 接收不到数据,看打印是卡在了 zmq_recv(),但是 wireshark 抓包显示是有内容发送过来的,但是具体的内容查看不了,因为 zmq 自己进行了封装。

    不知道有没有大佬遇到过类似的问题!
    
    7 条回复    2018-07-19 13:48:42 +08:00
    scmod
        1
    scmod  
       2018-07-11 17:30:30 +08:00
    是不是只是自己这边处理来不及了...比如像本地接收队列满了有个策略,然后选的策略满了之后忽略之类的?好像也可以拒绝接收,这样存在 mq 那边..
    V2WT
        2
    V2WT  
    OP
       2018-07-11 17:38:45 +08:00
    @scmod 没有满,数据量不大,可以看到是每一条都处理完的。
    scmod
        3
    scmod  
       2018-07-12 09:21:10 +08:00
    @V2WT 那好像没遇到过类似的了,接收消息是自动 ack 的吗,会不会选的手动但是没有 ack 然后又设置了 qos 之类的,好像这个可能性也不大诶~
    V2WT
        4
    V2WT  
    OP
       2018-07-12 10:51:45 +08:00
    @scmod 接收的每条消息都会回复的,没有设置 qos 之类的,官方的例子 master 是进程,worker 是多线程的,我改成了多进程的,不知道是不是这个有影响。
    scmod
        5
    scmod  
       2018-07-13 08:27:43 +08:00
    @V2WT 这个好像就不清楚了..多进程的话按理也没什么啊,mq 的话可以只把消息发到其中任一个进程正常处理就行了.这种卡在一个地方 cpu 占用率变很低的问题好复杂~
    V2WT
        6
    V2WT  
    OP
       2018-07-13 08:46:13 +08:00
    @scmod 昨天长拷了一夜,debug 版本的 zmq 没有出现我说的问题。release 版本的 zmq 会复现。
    scmod
        7
    scmod  
       2018-07-19 13:48:42 +08:00
    @V2WT 666...令人窒息的操作...代码比对下看看可能哪里有 bug?最近 git 貌似不翻墙打不开或者打开很慢都
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2663 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 15:20 · PVG 23:20 · LAX 08:20 · JFK 11:20
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.