java - jms 队列 vs 内存中 java 队列

标签 java jms jms-topic

我遇到一种情况,我需要从某个主题读取(正在进行的)消息并将它们放入另一个 Queue 中。我怀疑我是否需要 jms Queue 或者我可以对内存中的 java Queue 感到满意。我将通过同一 jvm 中的其他线程从队列中读取消息,并在从(内存中)队列读取消息后对主题消息进行客户端确认,并根据需要进行处理(将其发送到远程 IBM)因此,如果我的客户端崩溃,内存队列中存在的消息将丢失,但仍存在于主题中,并将重新发送给我。我说得对吗?

最佳答案

其中一些取决于您如何设置队列/主题以及用于从 IBM MQ 读取的连接字符串,但如果您使用默认值,则如果您将其读取到 in- 中,您将丢失消息内存队列。

我会使用 ActiveMQ,或者在与库相同的 JVM 中,这样你就可以让它负责接收、传递和持久化。

此外,如果您正在收听某个主题,即使您之后重新连接,也不会在崩溃后向您发送错过的消息,除非您已经

  1. 将您的客户端配置为持久订阅者
  2. 及时重新连接(在达到 expireMessagesPeriod 之前)

如果确保每条消息的传递很重要,特别是在异步环境中,ActiveMQ 库并不大,但值得使用。

关于java - jms 队列 vs 内存中 java 队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35371641/

相关文章:

java - 每个集群中运行的监听器仅从主题消费一次消息

java - 如何从kotlin中的列表中删除一些元素

java - 当没有订阅者时 ActiveMQ 上的消息过期

java - 如何使用 wicket ajax 请求处理 session 超时?

jms - 尝试远程连接到 websphere 上的 JMS 队列时 sun/io/MalformedInputException

java - 动态设置 MessageDrivenBeans 中的激活配置属性

c# - Oracle AQ 主题队列使用 ODP.NET 出队

java - 我应该多久实例化一次 JMS 主题连接和 session

java - 像 PHP 中的文件写入/读取功能

java - 如何使用 Java 创建二叉树最大深度中包含的节点的链表