在下面的 JBoss/HornetQ 用户手册页中,您可以看到 HornetQ 如何使用 java.io.InputStream 提供一种将数据流式传输到队列消息的机制。给出了相同代码的 JMS 版本。有没有人遇到过使用 IBM MQSeries / WebsphereMQ 的等价物?
假设我有大量数据要放在 JMS 消息中,这对我来说只是一个字节流。在 Hornet 示例中,仅在发送消息时才读取流,因此如果是,例如 FileInputStream,那么我们只需要足够的内存来缓冲一大块字节。我可以使用 javax.jms.BytesMessage 发送字节块并使用 BytesMessage 缓冲它们。这样做的问题是 BytesMessage (com.ibm.msg.client.jms.internal.JmsBytesMessageImpl) 的 IBM 实现必须缓存它们,直到消息被发送,如果这是大量数据,那就是一个问题。更糟糕的是,虽然我只发送字节,但 IBM 实现似乎保留了重复的副本,一个在 BytesArrayOutputStream 中,另一个在 DataOutputStream 中。