使用 Redis 实现 JMS/AMQP 消息传递模式
当我遇到一些关于使用消息传递软件(例如ZeroMQ和Redis)时,这个问题就出现了,但我一直听说Redis本身使用了消息传递系统。那么,如果Redis与其他消息传递系统一起使用,这是否意味着Redis在用作消息传递系统时存在一些严重的缺陷?
虽然使用Redis进行缓存和发布/订阅对我来说很清楚,但目前还不清楚Redis是否可以用于代替成熟的消息传递系统,如JMS,AMQP或ZeromQ。
撇开标准合规性方面不谈,只关注功能/特性,Redis 是否为消息传递系统所需的所有消息传递模式/模型提供支持?
我正在谈论的消息传递模式是:
- RPC/Request-reply(一个使用ActiveMQ/JMS的例子,另一个使用RabbitMQ/AMQP的例子)
- 管道/工作队列(每条消息使用一次,最多一次)
- 广播(每个人都订阅了该频道)
- 多播(根据消费者的选择器过滤服务器上的消息)
- 任何其他消息传递模式?
如果是,那么Redis似乎同时解决了两个(可能更多)方面:缓存和消息传递。
我正在由Java / Java EE服务器支持的Web应用程序的上下文中查看此内容。我不是从概念验证的角度来看待这个问题,而是从大规模的软件开发角度来看待这个问题。
编辑1:
用户:791406问了一个有效的问题:
“谁在乎redis是否支持这些模式;Redis 是否满足您的 SLA 和 QoS 需求?
我认为最好将此细节作为问题的一部分,而不是在评论部分提供。
我目前的需求与SLA和QOS的关系不大,而与为我的工作(消息传递)选择一种工具有关,即使将来我的需求增长(合理地),我也可以使用该工具。我一开始是从简单的需求开始的,我们都知道需求往往会增长。不,我不是在寻找一个可以完成所有工作的工具。我只是想知道Redis是否满足了消息传递系统通常的要求,就像ActiveMQ / RabbitMQ一样。当然,如果我的SLA / QOS需求是极端/古怪的,我需要一个特殊的工具来满足这一点。例如:在某些情况下,由于特定的SLA要求,可以比RabbitMQ选择ZeroMQ。我不是在谈论这种特殊要求。我专注于一般的企业需求。
我担心(基于我的小理解)尽管redis可以用作我今天消息传递需求的基本工具,但它可能是将来真正的消息传递工作的错误工具。我有像ActiveMQ / RabbitMQ这样的消息传递系统的经验,并且知道它们可以用于简单到(合理)复杂的消息传递需求。
编辑2:
Redis网站提到“Redis经常被用作消息传递服务器”,但如何实现消息传递模式尚不清楚。
Salvatore sanfilippo提到Redis用户倾向于将其用作数据库,消息传递总线或缓存。它能在多大程度上充当“消息传递总线”尚不清楚。
当我试图找出redis不支持的JMS的哪些消息传递要求时,我遇到了Redis支持但JMS不支持的东西:模式匹配订阅,即客户端可以订阅glob样式的模式,以便接收发送到与给定模式匹配的通道名称的所有消息。
结语:
我决定使用JMS来满足我的消息传递需求,并使用Redis进行缓存。