如何用redis做消息队列的应用
我有一个php代码,接受任意客户端的请求,现在想在后端加上redis的队列将消息传递到别的处理模块。
大致结构如下
client a \
client b — broker.php -> redis -> worker.php
client c /
... /
1,broker.php如何获取后端worker.php的处理结果(是引入一个响应队列么)
2,如果引入响应队列,broker.php如何将不同的结果对应返回给abc...客户端
3,如果php无法实现这种场景,有其它什么建议方法没,给点参考资料,thanks!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
redis只是提供一个高性能的、原子操作的分布式队列实现。具体的业务还是得需要你自己定制。
你的需求实际上是一个变形的生产者-消费者实现。对于此类需求,主要是将请求和实际的处理过程解耦,一般都是采取异步的方式来通知请求方,这跟用不用redis其实没有多大的关系。一般的实现方法是你需要将用户的请求封装成一个Task,然后将这个Task再push到redis队列,然后后端的worker.php完全可以多进程、多线程的并发处理Task并将处理结果回调给请求方。这里唯一麻烦点的就是这个Task的设计,需要能够包含请求信息(请求内容,请求方标识等等).
后端:
redis.blpush
模块:
redis.brpop
文档:
http://redis.io/commands
//PHP我不太知道,这类问题应该都是这个思路吧?可以先用命令模拟出机制,然后调用库实现
http://zyan.cc/httpsqs/
楼主是想要实现异步响应客户端的请求吧。把耗时的请求交给worker处理。建议加callback 实现。