RabbitMQ 消息响应的问题

2016-07-28 12:41:54 +08:00
 xss

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

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

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

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

5328 次点击
所在节点    编程
12 条回复
adrianzhang
2016-07-28 12:56:33 +08:00
建立两个 queue
lijinma
2016-07-28 14:06:08 +08:00
一楼思路正确啊,两个 queue 就解决了吧
xss
2016-07-28 14:34:16 +08:00
@adrianzhang
@lijinma

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

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

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

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


这个 worker 实现起来会稍微复杂,感觉用 go 这种支持协程的写会省力点。
adrianzhang
2016-07-28 19:05:19 +08:00
实践中可考虑工作流与数据分离 session 放在 memcache
rrfeng
2016-07-28 19:40:59 +08:00
这叫强行用队列吧……
azhw
2016-10-15 09:19:18 +08:00
@xss 这其实是用 rabbitmqmq 实现 rpc 调用,看官方文档,专门提到一种模式,事实现 rpC 的

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

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

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

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

© 2021 V2EX