gpt4 book ai didi

Java 消息队列抽象

转载 作者:行者123 更新时间:2023-11-30 08:37:31 25 4
gpt4 key购买 nike

我是 Java 的新手,目前正在使用许多基于 Dropwizard 的微服务和 Java8 SE 编写 Web 应用程序。我现在想为服务之间的异步通信集成消息队列,并希望从使用基于云的队列(如 Amazon SQS)开始。但是,我不想将自己锁定在特定的云提供商中,因此希望可以选择轻松切换到另一个提供商或稍后使用 RabbitMQ 或 ActiveMQ 之类的东西。所以我的问题是,Java 中是否有允许这样做的框架?例如,使用 Hibernate,我可以通过简单的配置更改在数据库之间切换,是否有消息队列的等效项?

我已经花了相当多的时间研究这个问题,但到目前为止我还没有找到明确的答案;

  • JMS,它看起来有点像我想要的,但看起来只在 Java EE 版本中可用并且可能需要应用服务器?对吗?
  • AMQP,它看起来像是用于消息队列互操作性的低级协议(protocol)。还有 Apache Qpid Proton,它看起来像一个纯 AMQP 消息库,但 Java 的所有文档和示例似乎都使用 JMS。
  • 我能找到的针对特定 MQ(Rabbit 等)的所有教程都使用那些特定于队列的客户端库。
  • 显然,我可以添加自己的抽象层,但不想重新发明轮子,而且我怀疑我不是第一个想做这样事情的开发人员。

最佳答案

正如 Hibernate 或 JDBC 允许您在不同的数据库提供者之间切换一样,JMS API 允许您随意在消息代理或消息提供者之间切换而不会破坏您的代码,前提是您没有在您的应用程序中使用任何特定的供应商扩展代码。

JMS 只是一个 API,没有 JMS 协议(protocol),只是各种供应商实现的 API,并为您提供一个客户端以与他们的消息提供程序一起使用。您可以很好地使用 Java 8 代码中的 JMS API,您只需要使用您碰巧选择的任何构建管理工具以及您当时碰巧使用的供应商的客户端 jar 来拉入 JMS API jar .要查看如何获取 JMS API jar 的 Apache 许可版本,请参阅此 question 的答案。 .

据我所知,Amazon 确实提供了 JMS 实现,文档 here似乎覆盖得很好。

当或者如果您决定切换到另一种消息传递产品,例如 ActiveMQ 或 RabbitMQ,每个消息传递产品都提供 JMS 实现,允许您更换客户端而不需要更改任何现有代码(同样前提是您不使用任何供应商扩展)。如果您切换到提供 AMQP 1.0 支持的消息传递解决方案,那么 Apache Qpid 项目提供的基于 AMQP 1.0 实现的 JMS here .

我认为您需要花一些时间阅读 JMS 规范和一些教程,以了解什么是 JMS 以及如何利用 JMS 和 JNDI 创建与提供者无关的代码。

关于Java 消息队列抽象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37148376/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com