Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用Redis实现JMS/AMQP消息传递模式_Java_Redis_Jms_Messaging_Amqp - Fatal编程技术网

Java 使用Redis实现JMS/AMQP消息传递模式

Java 使用Redis实现JMS/AMQP消息传递模式,java,redis,jms,messaging,amqp,Java,Redis,Jms,Messaging,Amqp,当我遇到一些关于使用ZeroMQ和Redis等消息传递软件的提及时(例如),这个问题就出现了,但我一直听说Redis本身使用了消息传递系统。那么,如果Redis与其他消息传递系统一起使用,是否意味着Redis单独用作消息传递系统时存在一些严重缺陷 虽然我很清楚使用Redis进行缓存和发布/订阅,但不清楚Redis是否可以用于成熟的消息传递系统,如JMS、AMQP或ZeroMQ 不考虑标准遵从性方面,只关注功能/特性,Redis是否支持消息传递系统所需的所有消息传递模式/模型 我所说的消息传递模式

当我遇到一些关于使用ZeroMQ和Redis等消息传递软件的提及时(例如),这个问题就出现了,但我一直听说Redis本身使用了消息传递系统。那么,如果Redis与其他消息传递系统一起使用,是否意味着Redis单独用作消息传递系统时存在一些严重缺陷

虽然我很清楚使用Redis进行缓存和发布/订阅,但不清楚Redis是否可以用于成熟的消息传递系统,如JMS、AMQP或ZeroMQ
不考虑标准遵从性方面,只关注功能/特性,Redis是否支持消息传递系统所需的所有消息传递模式/模型

我所说的消息传递模式是:

  • RPC/请求-答复(一种 使用ActiveMQ/JMS和RabbitMQ/AMQP)
  • 管道/工作队列(每条消息的一次和一次消耗)
  • 广播(每个人都订阅了该频道)
  • 多播(根据用户的选择器在服务器上过滤消息)
  • 还有其他消息传递模式吗
  • 如果是,那么Redis似乎可以同时解决两个(可能更多)方面:缓存和消息传递

    我是在Java/JavaEE服务器支持的web应用程序的上下文中研究这个问题的。 我不是从概念证明的角度来看这个问题,而是从大规模软件开发的角度来看这个问题

    Edit1:
    用户:791406问了一个有效的问题:

    “谁在乎redis是否支持这些模式;redis是否符合您的SLA 以及服务质素的需要?"

    我认为最好把这个细节作为问题的一部分,而不是在评论部分

    我目前的需求与SLA和QOS关系不大,更多的是为我的工作选择一个工具(消息传递),即使我的需求在未来(合理地)增长,我也可以使用它。 我首先从简单化的需求开始,我们都知道需求会增长。 而且,,我不是在寻找一个可以完成所有功能的工具。 我只是想知道Redis是否像ActiveMQ/RabbitMQ一样,满足了消息传递系统的一般要求。当然,如果我的SLA/QOS需求极端/古怪,我需要一个特殊的工具来满足它。例如:在某些情况下,由于特定的SLA要求,可以选择ZeroMQ而不是RabbitMQ。我不是说这些特殊要求。我关注的是一般的企业需求

    我担心(基于我的一点理解),尽管redis可以作为满足我今天的信息需求的基本工具,但它可能是未来真正的信息工作的错误工具。我对ActiveMQ/RabbitMQ这样的消息传递系统有经验,并且知道它们可以用于简单到(合理地)复杂的消息传递需求

    Edit2

  • redis网站提到了这一点,但如何实现消息传递模式还不清楚

  • 萨尔瓦托·桑菲利波提到。它能在多大程度上充当“消息传递总线”还不清楚

  • 当我试图找出redis不支持的JMS消息传递需求时,我遇到了redis支持但JMS不支持的东西:模式匹配订阅,即客户端可以订阅glob样式的模式,以便接收发送到与给定模式匹配的通道名称的所有消息

  • 结论

    我已决定使用JMS满足我的消息传递需求,并使用Redis进行缓存。

    您需要什么

    我认为,在决定使用消息平台之前,您应该问自己“我需要什么质量的消息来支持我的应用程序?”。谁在乎redis是否支持这些模式;redis能否满足您的SLA和QoS需求?首先关注这一点,然后根据评估做出技术决策

    话虽如此,我将提供我的意见,你可以如何作出决定

    高度可靠/持久/持久的消息传递
    让我们举一个极端的例子:假设您正在构建一个交易或金融应用程序。此类应用程序需要严格的SLA,其中消息持久性、可靠性、一次交付和持久性至关重要。在这种情况下,使用redis作为消息主干可能是一个不好的选择,原因很多

    • 消息重新传递(当sh*t击中风扇时)
    • redis关闭时的消息存储复制
    • 消息事务(redis无法执行XA)
    • 生产者/订户容错和断开恢复能力
    • 消息顺序排序
    • 代理关闭时发送消息(存储和转发)
    • 单线程redis可能成为瓶颈
    如果您的系统有严格的SLA,那么肯定会出现这些问题,那么您将如何处理这些限制?您可以围绕redis实现自定义代码来解决一些问题,但当ActiveMq、WebsphereMQ和WebLogic JMS等成熟的消息传递平台提供持久性、可靠性和容错性时,为什么还要费事呢?您说过您在Java/JavaEE堆栈上,所以您可以使用一些最健壮的消息传递框架,无论是开源的还是商业的。如果你在做金融交易,那么你需要考虑这些选项。 高性能/大型分布式系统消息传递
    如果您正在构建一个社交网络或游戏平台,希望性能优于可靠性,ZeroMq可能是一个很好的选择。它是一个封装在消息传递类API中的套接字通信库。它是分散的(没有代理),速度非常快,具有高度的弹性和容错性。如果您需要使用代理中介、流控制、消息持久性或点对点同步来执行诸如N对N发布/订阅之类的操作,ZeroMq提供了必要的工具和服务