从mq队列中获取java对象

时间:2013-09-26 02:16:21

标签: ibm-mq

我有两个问题:

  1. 我想知道是否有任何工具可以获取放入mq的java对象。如果是,请提供代码片段以从mqqueue获取java对象消息。

  2. 是否可以不从队列中删除消息,而是读取丢弃的最新消息。类似于运行代码时,它应该读取队列中存在的最新消息。

  3. 如果您在理解上述问题时遇到困难,请与我们联系。

1 个答案:

答案 0 :(得分:0)

关于第二次查询

是的,我们可以读取队列中的最新消息,而无需将其从队列中删除。我们称之为浏览消息

您必须使用少量消息获取选项,例如 MQGMO_BROWSE_FIRST

。在使用GMO MQGMO_BROWSE_FIRST发出MQGET之后,我们需要向GMO发出MQGET, MQGMO_BROWSE_NEXT 。我们必须在循环中发出这些MQGET,直到我们到达最后一条消息。

这里清楚地解释了一切: http://publib.boulder.ibm.com/infocenter/wmqv7/v7r1/index.jsp?topic=%2Fcom.ibm.mq.doc%2Ffr12610_.htm

实际上,如果MQ API可以提供类似MQGMO_BROWSE_LAST的东西,那就简单得多了。 但是,它仍然很好,毕竟我们称它为队列(FIFO),而不是堆栈(LIFO)。

关于第一次查询

我从中理解的是,您希望将java类对象放入队列中。好吧,正如我评论的那样,我们只将消息放入队列中。无论您是放置文本消息还是二进制消息,MQ都足够灵活,可以接受这两种消息。现在,应用程序如何处理消息中的二进制或文本信息。

所以,这真的是你的实现。我会按如下方式实现它:

发送方: 假设我们有一个ObjToBeSent对象,其变量状态为:

ObjToBeSent.Vara=1;
ObjToBeSent.Varb="test";

我将形成如下所示的XML消息,并将在队列中发布:

<ObjToBeSent>
<Vara><Integer>1</Integer></Vara>
<Varb><String>test</String></varb>
</ObjToBeSent>

接收方: 从队列中获取消息。解析XML并获取变量的值以及数据类型。

声明一个对象,例如ObjectReceived,并从输入消息中设置变量的值。