如何将JMS队列视为临时存储?

时间:2013-04-18 15:39:08

标签: java jms temporary-objects

我希望能够从队列中拉出和插入消息。是否可以为此利用JMS功能,或者我是否需要为此创建自定义数据结构?

如果临时存储还有其他特定设计模式,请告诉我。

更新: 由于许多人要求更多细节,所以在这里。我的要求是将消息存储在队列中,多个客户端可以从中将数据推送到该队列,并在需要时从中提取数据。此队列应该可供多个客户端使用。一条消息只应处理一次,如果客户端无法处理数据,则消息应返回队列。

1 个答案:

答案 0 :(得分:0)

您似乎在一个问题中提出了多项问题,因此您可能会有一点澄清您需要回答的个别问题。

是的,可以将JMS用作“临时”存储,但这取决于您的意思和所需内容。大多数JMS提供程序(例如ActiveMQ)允许您在队列上执行以下操作:

  • 将队列设置为持久(即存储在磁盘上,如果队列重新启动,所有消息都在那里)或非持久(即不存储在磁盘上,如果队列重新启动,则不会有消息)。
  • 您可以设置邮件的到期时间,这样如果它们没有及时被提取,就会被丢弃。

这取决于您所称的“临时存储”。 JMS队列不是数据库,它是一个消息传递系统。

关于数据结构,您可以序列化ObjectMessage中的普通Java对象以及TextMessage的文本消息。因此,您可以传递XML,JSON,CSV或任何您想要的内容。您还可以包含可用于路由的特殊标头或与消息关联的其他元信息。再次取决于“自定义数据结构”的含义。您还可以一个接一个地发送原始BytesMessageMapMessage(键值对)或具有不同数据类型的StreamMessage

如果您需要字面意义上的临时存储,也许您应该查看嵌入式数据库,例如Derby或HSQLDB。我认为他们也有配置来说明数据是否应该保留在内存中,或者在数据变得太大之后转到磁盘上。