JMS 和 ActiveMQ

Yoa*_*nda 1 java spring activemq-classic jms message-queue

我需要编写一个侦听消息队列(消费者)并将其读取的数据发送到数据库的服务器,以及另一个将信息(生产者)发布到该队列的服务器。

我正在关注Spring+JMS 上的官方 spring 参考

我不明白以下内容:

  1. JMS和ActiveMQ有什么关系?
  2. 其中哪一个真正实现了消息队列?
  3. 在我看到的例子中:

    FileSystemUtils.deleteRecursively(new File("activemq-data"));
    
    Run Code Online (Sandbox Code Playgroud)

    作为删除队列的一种手段。

    队列的数据是否保存在文件中?

  4. 如果队列是由文件系统维护的,我如何将我的JMS服务器扩展到多于一台计算机(服务器)

谢谢!

Jes*_*per 5

JMS只是一个API规范,而不是一个实现。如果您想对消息队列执行某些操作,则需要一个实现 JMS API 的软件。

ActiveMQ是一个实现 JMS API 的消息代理。除了 ActiveMQ 之外,还有许多其他产品也实现了 JMS API。

这个想法是,您的软件使用 JMS API,而不将其专门绑定到特定的实现,因此原则上您可以用另一个实现 JMS 的产品替换 ActiveMQ,而无需更改程序中的任何内容。这一原则在软件开发中被大量使用,并且在 Java EE 世界中还有许多其他 API 和实现以这种方式工作(例如 JDBC 和 JDBC 驱动程序、JPA 和 Hibernate、Servlet API 和 Tomcat)。

所以,ActiveMQ才是真正实现消息队列的。

队列的数据是否保存在文件中?

显然这就是 ActiveMQ 默认执行的操作。

如果队列是由文件系统维护的,我如何将我的JMS服务器扩展到多于一台计算机(服务器)

首先,ActiveMQ 将数据存储在文件系统上这一事实并不意味着它不能扩展到多个服务器。事实上,最终所有软件(还有数据库)都将其数据存储在文件系统上(如果数据必须持久)。阅读ActiveMQ 网站上的文档以了解如何扩展它(它确实支持集群)。