1

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

请让我知道是否有任何其他特定的临时存储设计模式。

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

4

1 回答 1

0

您似乎在一个问题中问了多个问题,因此澄清一下您需要回答的各个点可能会对您有所帮助。

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

  • 将队列设置为持久(即存储在磁盘上,如果队列重新启动,所有消息都在那里)或非持久(即不存储在磁盘上,如果队列重新启动,将没有消息)。
  • 您可以为消息设置过期时间,以便如果未按时提取它们,它们将被丢弃。

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

关于数据结构,您可以序列化普通的 Java 对象,ObjectMessage也可以使用TextMessage. 因此,您可以通过 XML、JSON、CSV 或任何您想要的方式。您还可以包含可用于路由或与消息关联的其他元信息的特殊标头。再次取决于“自定义数据结构”的含义。您还可以一个接一个地发送一个 rawBytesMessage或一个MapMessage(键值对)或一个StreamMessage在其中具有不同数据类型的 a。

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

于 2013-04-18T15:44:52.383 回答