JMS 和 ActiveMQ

JMS and ActiveMQ

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

我在 Spring+JMS 上关注 this official spring reference

我不明白以下内容:

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

    FileSystemUtils.deleteRecursively(new File("activemq-data"));
    

    作为删除队列的手段。

    队列的数据是保存在文件里面的吗?

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

谢谢!

What is the relationship between JMS and ActiveMQ?

Java 消息服务 (JMS) API 是一个 Java 面向消息的中间件 (MOM) API,用于在两个或多个客户端之间发送消息。 JMS 是 Java 平台企业版的一部分,由 Java 社区进程下开发的规范定义为 JSR 914。ActiveMQ 是遵循 JSR 914 的第三方消息服务提供商。

Which one of them is actually implementing the message queue?

ActiveMQ 提供消息队列实现。

对于 Spring 和 ActiveMQ 集成,请参阅此 post

JMS 只是一个 API 规范,而不是一个实现。如果您想对消息队列做一些事情,您需要一个实现 JMS API 的软件。

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

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

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

Is the data of the queue maintained inside a file?

显然这就是 ActiveMQ 默认情况下所做的。

If the queue is maintained of the file system, how can I scale my JMS server to more than one computer (server)

首先,ActiveMQ 在文件系统上存储数据这一事实并不意味着它不能扩展到多个服务器。事实上,最终所有软件(包括数据库)都将它们的数据存储在文件系统上(如果数据必须持久化的话)。阅读 ActiveMQ website to learn how to scale it (it does support clustering).

上的文档