之前都是用 gearman 的,现在想问一下 rabbitmq 能不能满足如下场景:
- Client 向 RabbitMQ 发送一条消息
- Customer 监听 RabbitMQ 上 Client 发送过来的消息,处理后得到结果 A
- Client 通过 RabbitMQ 接收 Customer 的处理结果 A
看文档,RabbitMQ 都是单向处理的,即只有上面的 1&2 好像并不能实现 3 这个过程?
如果可以,能否给几个链接地址看下?
之前都是用 gearman 的,现在想问一下 rabbitmq 能不能满足如下场景:
看文档,RabbitMQ 都是单向处理的,即只有上面的 1&2 好像并不能实现 3 这个过程?
如果可以,能否给几个链接地址看下?
|
1
建立两个 queue
|
|
2
一楼思路正确啊,两个 queue 就解决了吧
|
|
3
@adrianzhang
@lijinma 两个 queue 会丢失上下文关系,比如我的应用场景是一个 web 页面,那么一个 session 传过来的数据,在第二个 queue 里面如何确定返回给哪个 session? 或者换句话说,如何保证一个用户提交的数据可以得到被正确处理的结果? |
|
iloveyouJul 28, 2016
4
你这就不是异步了
|
|
domtyJul 28, 2016
5
3 这种需求本身就不适合消息队列吧。
这种场景为什么不考虑用 RPC 而是用 MQ 呢? |
|
pubbyJul 28, 2016 via Android
6
这需求用 gearman 不是挺好的吗
|
|
8
|
|
pubbyJul 28, 2016
9
非要用的话
保持 gearman 调用不变(因为你的业务需求其实是同步的) 设计一个新的 worker , 功能就是分发任务到 RabbitMQ 队列,再开一个结果队列, worker 里内部维护一个缓冲区,把结果和 task 对应起来返回。 这个 worker 实现起来会稍微复杂,感觉用 go 这种支持协程的写会省力点。 |
|
adrianzhangJul 28, 2016 via Android
10
实践中可考虑工作流与数据分离 session 放在 memcache
|
|
rrfengJul 28, 2016
11
这叫强行用队列吧……
|