java - JMS 和 ActiveMQ

标签 java spring jms activemq message-queue

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

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

我不明白以下内容:

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

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

    作为删除队列的手段。

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

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

谢谢!

最佳答案

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

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

想法是您的软件使用 JMS API 而无需专门将其绑定(bind)到特定的实现,因此原则上您可以用另一个实现 JMS 的产品替换 ActiveMQ,而无需更改程序中的任何内容。这个原则在软件开发中被大量使用,在 Java EE 世界中有许多其他 API 和实现以这种方式工作(例如,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 的文档了解如何扩展它(它确实支持 clustering )。

关于java - JMS 和 ActiveMQ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37384039/

相关文章:

java - 在另一个类中传递方法时类型不兼容

java - 编译android应用程序时出现问题

android - 使用 spring android resttemplate 和 android 注释设置标题

java - DefaultMessageListenerContainer 不会停止

java - 使用 JMS 进行简单聊天

java - 使用 JMSTemplate 查找 JMS 队列大小

java - 在多个线程中划分合并排序算法

java - 如何从文本中检索各种日期和时间值

java - Querydsl PathBuilder 字符串参数 'variable' 的用途是什么

java - Spring用单线程池并发处理多个队列