IBM MQSeries中的org.hornetq.api.core.client.ClientMessage.setBodyInputStream的等效项

时间:2013-01-22 12:09:39

标签: jms ibm-mq

在下面的JBoss/HornetQ user manual page中,您可以看到HornetQ如何使用java.io.InputStream提供一种将数据流式传输到队列消息的机制。给出了相同代码的JMS版本。有没有人遇到使用IBM MQSeries / WebsphereMQ的等价物?

假设我有大量数据放在JMS消息中,对我而言只是一个字节流。在Hornet示例中,仅在发送消息时才读取流,因此如果是,则说FileInputStream,那么我们只需要足够的内存来缓冲一大块字节。我可以使用javax.jms.BytesMessage发送大块的字节并使用BytesMessage来缓冲它们。这样做的问题是BytesMessage的IBM实现(com.ibm.msg.client.jms.internal.JmsBytesMessageImpl)必须缓存它们,直到发送消息为止,如果这是大量数据则是一个问题。更糟糕的是,虽然我只发送字节,但IBM实现似乎保留了重复副本,一个位于BytesArrayOutputStream中,另一个位于DataOutputStream中。

2 个答案:

答案 0 :(得分:1)

在WebSphere MQ中,与您描述的最接近的是reference message。信息中心中描述的方法需要对通道出口进行自定义编程以获取文件系统对象,并在通过通道传输之前将其放入消息中。远程端的补充出口将有效负载保存到文件中,并在返回给应用程序的消息中放置对该文件的引用。

我们在WMQ中也有程序在一端采用STDIN或管道,并将消息放到另一端的队列中。其中一对可以充当管道,通过该管道,面向行的ASCII数据在不同机器上的进程之间流动。但是,没有JMS实现,对二进制数据来说效果不好。

答案 1 :(得分:0)

在WMQ中,我们有Group and Segment的概念。 除Z / OS外,所有操作系统均支持分段。

Segmentation In WMQ

查看详细信息

在发送消息时使用GroupId,MsgSeqNumber和Offset。

如果您在GMO中提供 MQGMO_COMPLETE_MSG ,则会收到消息,然后根据MsgSeqNumber和

自动连接所有细分
  

您将在收到的应用程序上收到一条消息   单身GET。