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