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

问一个关于 MQ 正确合理使用方式的问题

  •  
  •   waczx · 2016-11-29 15:29:07 +08:00 · 2587 次点击
    这是一个创建于 2950 天前的主题,其中的信息可能已经有所发展或是发生改变。

    目前使用的是 rabbitmq 作为队列服务,比如有系统 A 和 B ,目前使用方式是:
    系统 A 先把消息放在自己的 redis 里面,然后每分钟起脚本,读取( lpop ) 300 条,调 B 系统的 curl 接口;
    系统 B 的接口接到消息,放在自己的 MQ queue 里面,然后起脚本消费 MQ 消息处理

    我倾向的方案:
    按照之前的工作经验,系统 A 和系统 B 共连一个 MQ 地址,定义一个 vhost.exchange.queue_name , A 有消息就朝里面塞, B 可以定时取就可以了啊

    求各位老司机的方案!

    16 条回复    2016-11-29 16:48:18 +08:00
    GOOD21
        1
    GOOD21  
       2016-11-29 15:47:32 +08:00
    感觉就是一个异步队列模型啊, A 是 Producer , B 是 Consumer 。

    直接 A 发送到 Broker ,然后 B 消费就好了。
    waczx
        2
    waczx  
    OP
       2016-11-29 15:52:18 +08:00
    @GOOD21 其实目的就是:异步通知 B 系统某个业务状态变化。。
    waczx
        3
    waczx  
    OP
       2016-11-29 15:53:05 +08:00
    @GOOD21 A 加一个 redis ,我个人觉得会拖垮正常的 redis 服务
    odirus
        4
    odirus  
       2016-11-29 15:54:07 +08:00
    楼主,本来就是这么做啊。。。
    9hills
        5
    9hills  
       2016-11-29 15:54:35 +08:00
    奇葩的使用方式。。
    odirus
        6
    odirus  
       2016-11-29 15:55:03 +08:00
    A 、 B 直连方案对你们来说有任何问题么?安全性 or 其他?
    Ouyangan
        7
    Ouyangan  
       2016-11-29 15:55:38 +08:00
    没能理解楼主为什么要加一层 redis , 哈哈
    GOOD21
        8
    GOOD21  
       2016-11-29 15:58:28 +08:00
    @waczx 首先要确认一下是不是内网调用,如果是内网的,完全没必要,直接在 B 起一个 Consumer 的长连接就可以了。
    waczx
        9
    waczx  
    OP
       2016-11-29 16:01:15 +08:00
    @GOOD21 A 、 B 、 MQ 均是在外网,三个系统间均单独的外网 ip
    waczx
        10
    waczx  
    OP
       2016-11-29 16:01:58 +08:00
    @odirus 因为内部刚刚使用 MQ
    imaxis
        11
    imaxis  
       2016-11-29 16:05:26 +08:00
    redis 放中间没啥用?
    waczx
        12
    waczx  
    OP
       2016-11-29 16:11:01 +08:00
    @imaxis 放中间只作为 push 和 pop ,没有其他作用,有作用的话:作为 A 的队列使用了
    GOOD21
        13
    GOOD21  
       2016-11-29 16:17:15 +08:00
    @waczx 外网调用 MQ 。。。这个还是比较猛烈的。。。带宽限制太多了。。。

    因为不了解具体业务,从“异步通知 B 系统某个业务状态变化” 和 “ A 、 B 、 MQ 均是在外网,三个系统间均单独的外网 ip ” 来看,其实就是一个简单的 http 调用就好了, A 通过 http 请求 B , B 处理请求。至于 A 、 B 内部的处理逻辑,如果是内网的 MQ 可以用,外网的,就别用了吧。
    waczx
        14
    waczx  
    OP
       2016-11-29 16:29:24 +08:00
    @GOOD21 AB 直连的话,考虑到了外网:
    1 、 MQ 连接超时,一个在国内,一个在国外
    2 、带宽流量
    GOOD21
        15
    GOOD21  
       2016-11-29 16:34:34 +08:00
    @waczx 外网的话,你可以理解就是两个公司间的调用了。 MQ 理论上来说应该 A 的内部有一套, B 的内部有一套才是正常的套路。
    deft00
        16
    deft00  
       2016-11-29 16:48:18 +08:00 via iPhone
    redis 本身也支持发布订阅模式呀
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2543 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 04:22 · PVG 12:22 · LAX 20:22 · JFK 23:22
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.