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

RabbitMQ 消息响应的问题

  •  
  •   xss · 2016-07-28 12:41:54 +08:00 · 5407 次点击
    这是一个创建于 3038 天前的主题,其中的信息可能已经有所发展或是发生改变。

    之前都是用 gearman 的,现在想问一下 rabbitmq 能不能满足如下场景:

    1. Client 向 RabbitMQ 发送一条消息
    2. Customer 监听 RabbitMQ 上 Client 发送过来的消息,处理后得到结果 A
    3. Client 通过 RabbitMQ 接收 Customer 的处理结果 A

    看文档,RabbitMQ 都是单向处理的,即只有上面的 1&2 好像并不能实现 3 这个过程?

    如果可以,能否给几个链接地址看下?

    12 条回复    2016-10-15 09:19:18 +08:00
    adrianzhang
        1
    adrianzhang  
       2016-07-28 12:56:33 +08:00 via Android   ❤️ 1
    建立两个 queue
    lijinma
        2
    lijinma  
       2016-07-28 14:06:08 +08:00   ❤️ 1
    一楼思路正确啊,两个 queue 就解决了吧
    xss
        3
    xss  
    OP
       2016-07-28 14:34:16 +08:00
    @adrianzhang
    @lijinma

    两个 queue 会丢失上下文关系,比如我的应用场景是一个 web 页面,那么一个 session 传过来的数据,在第二个 queue 里面如何确定返回给哪个 session?
    或者换句话说,如何保证一个用户提交的数据可以得到被正确处理的结果?
    iloveyou
        4
    iloveyou  
       2016-07-28 15:27:45 +08:00
    你这就不是异步了
    domty
        5
    domty  
       2016-07-28 15:29:23 +08:00
    3 这种需求本身就不适合消息队列吧。
    这种场景为什么不考虑用 RPC 而是用 MQ 呢?
    pubby
        6
    pubby  
       2016-07-28 15:32:18 +08:00 via Android
    这需求用 gearman 不是挺好的吗
    lijinma
        7
    lijinma  
       2016-07-28 15:41:57 +08:00
    @xss 确实是我没看清你的题目。

    看你的介绍,这本身就不是异步的啊?这明显是同步操作吧?
    xss
        8
    xss  
    OP
       2016-07-28 16:01:16 +08:00
    @domty
    @pubby
    @lijinma

    gearman 的确能满足需求,目前主要是 gearman 的界面监控比较搓,所以看看有没有什么替代的方案.
    因为 RabbitMQ 本身提供一个监控用的界面,所以问一下各位能否满足这个需求.
    如果不能那就只能看看别的消息框架了.
    pubby
        9
    pubby  
       2016-07-28 17:06:19 +08:00
    非要用的话

    保持 gearman 调用不变(因为你的业务需求其实是同步的)
    设计一个新的 worker ,
    功能就是分发任务到 RabbitMQ 队列,再开一个结果队列, worker 里内部维护一个缓冲区,把结果和 task 对应起来返回。


    这个 worker 实现起来会稍微复杂,感觉用 go 这种支持协程的写会省力点。
    adrianzhang
        10
    adrianzhang  
       2016-07-28 19:05:19 +08:00 via Android
    实践中可考虑工作流与数据分离 session 放在 memcache
    rrfeng
        11
    rrfeng  
       2016-07-28 19:40:59 +08:00
    这叫强行用队列吧……
    azhw
        12
    azhw  
       2016-10-15 09:19:18 +08:00 via iPhone
    @xss 这其实是用 rabbitmqmq 实现 rpc 调用,看官方文档,专门提到一种模式,事实现 rpC 的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1172 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 18:11 · PVG 02:11 · LAX 10:11 · JFK 13:11
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.