2016-02-12 104 views
0

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

回答

1

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

我会使用ActiveMQ,或者在与库相同的JVM中,因此您需要负责接收,传递和持久化。

另外,如果你在听,你不会崩溃后发送错过的消息的主题,即使你重新算账,除非你已经

  1. 配置你的客户为长期订户
  2. 在达到expireMessagesPeriod之前重新连接

ActiveMQ库并不大,值得使用,如果确保每个消息的传递都很重要,尤其是在异步环境中。

0

主要的区别在于,当应用程序关闭时,内存中会丢失数据;如果主题/队列不是持久性的,则服务器关闭时JMS队列会丢失数据。前者比后者更可能,所以我也会说跟JMS一起去。