Java 使用Redis实现JMS/AMQP消息传递模式
当我遇到一些关于使用ZeroMQ和Redis等消息传递软件的提及时(例如),这个问题就出现了,但我一直听说Redis本身使用了消息传递系统。那么,如果Redis与其他消息传递系统一起使用,是否意味着Redis单独用作消息传递系统时存在一些严重缺陷 虽然我很清楚使用Redis进行缓存和发布/订阅,但不清楚Redis是否可以用于成熟的消息传递系统,如JMS、AMQP或ZeroMQJava 使用Redis实现JMS/AMQP消息传递模式,java,redis,jms,messaging,amqp,Java,Redis,Jms,Messaging,Amqp,当我遇到一些关于使用ZeroMQ和Redis等消息传递软件的提及时(例如),这个问题就出现了,但我一直听说Redis本身使用了消息传递系统。那么,如果Redis与其他消息传递系统一起使用,是否意味着Redis单独用作消息传递系统时存在一些严重缺陷 虽然我很清楚使用Redis进行缓存和发布/订阅,但不清楚Redis是否可以用于成熟的消息传递系统,如JMS、AMQP或ZeroMQ 不考虑标准遵从性方面,只关注功能/特性,Redis是否支持消息传递系统所需的所有消息传递模式/模型 我所说的消息传递模式
不考虑标准遵从性方面,只关注功能/特性,Redis是否支持消息传递系统所需的所有消息传递模式/模型
我所说的消息传递模式是:
用户:791406问了一个有效的问题: “谁在乎redis是否支持这些模式;redis是否符合您的SLA 以及服务质素的需要?" 我认为最好把这个细节作为问题的一部分,而不是在评论部分 我目前的需求与SLA和QOS关系不大,更多的是为我的工作选择一个工具(消息传递),即使我的需求在未来(合理地)增长,我也可以使用它。 我首先从简单化的需求开始,我们都知道需求会增长。 而且,不,我不是在寻找一个可以完成所有功能的工具。 我只是想知道Redis是否像ActiveMQ/RabbitMQ一样,满足了消息传递系统的一般要求。当然,如果我的SLA/QOS需求极端/古怪,我需要一个特殊的工具来满足它。例如:在某些情况下,由于特定的SLA要求,可以选择ZeroMQ而不是RabbitMQ。我不是说这些特殊要求。我关注的是一般的企业需求 我担心(基于我的一点理解),尽管redis可以作为满足我今天的信息需求的基本工具,但它可能是未来真正的信息工作的错误工具。我对ActiveMQ/RabbitMQ这样的消息传递系统有经验,并且知道它们可以用于简单到(合理地)复杂的消息传递需求 Edit2:
让我们举一个极端的例子:假设您正在构建一个交易或金融应用程序。此类应用程序需要严格的SLA,其中消息持久性、可靠性、一次交付和持久性至关重要。在这种情况下,使用redis作为消息主干可能是一个不好的选择,原因很多
- 消息重新传递(当sh*t击中风扇时)
- redis关闭时的消息存储复制
- 消息事务(redis无法执行XA)
- 生产者/订户容错和断开恢复能力
- 消息顺序排序
- 代理关闭时发送消息(存储和转发)
- 单线程redis可能成为瓶颈
如果您正在构建一个社交网络或游戏平台,希望性能优于可靠性,ZeroMq可能是一个很好的选择。它是一个封装在消息传递类API中的套接字通信库。它是分散的(没有代理),速度非常快,具有高度的弹性和容错性。如果您需要使用代理中介、流控制、消息持久性或点对点同步来执行诸如N对N发布/订阅之类的操作,ZeroMq提供了必要的工具和服务