Jsp 需要从MQQueue获取最早的MQMessage

Jsp 需要从MQQueue获取最早的MQMessage,jsp,monitoring,messaging,ibm-mq,Jsp,Monitoring,Messaging,Ibm Mq,嗨,我是IBM MQ的新手。在这里,我的要求是从MQQueue中获取最早的MQMessage,而不管它们设置的优先级如何,并将其显示在JSP中以用于某种监视目的。在现行守则中, qMgr = new MQQueueManager(qManager); int openOptions = MQC.MQOO_INQUIRE | MQC.MQOO_BROWSE|MQC.MQOO_INPUT_SHARED; MQQueue eventQueue = qMgr.accessQueue(q

嗨,我是IBM MQ的新手。在这里,我的要求是从MQQueue中获取最早的MQMessage,而不管它们设置的优先级如何,并将其显示在JSP中以用于某种监视目的。在现行守则中,

qMgr = new MQQueueManager(qManager);

    int openOptions = MQC.MQOO_INQUIRE | MQC.MQOO_BROWSE|MQC.MQOO_INPUT_SHARED;
    MQQueue eventQueue = qMgr.accessQueue(qName, openOptions, null, null, null);
    MQMessage retrievedMessage = new MQMessage();   
    MQGetMessageOptions gmo = new MQGetMessageOptions();
            gmo.options = MQC.MQGMO_BROWSE_FIRST;
    eventQueue.get(retrievedMessage, gmo); 

在这里,我可以获取MQMessage,但它可能不是队列中最早的消息。我对此一无所知。请帮助我,是否有任何方法获取该消息。

如果队列是FIFO,则您的浏览将返回最早的消息。但是,如果队列设置为优先级传递,则必须浏览队列,直到找到优先级最低的第一条消息。您的代码段表明这是一个事件队列。如果这是指SYSTEM.*.EVENT队列,则它们应始终处于FIFO模式。即使管理员将其更改为优先级传递,所有系统事件消息都以相同的优先级生成

使用优先级排序的消息所面临的困难是,您可以忽略较低的优先级,但不能忽略较高的优先级。例如,如果在浏览时指定优先级为5,并且任何消息的优先级为4或更低,则不会返回这些消息。但是将返回消息或更高优先级的消息,不仅返回优先级为5的消息,而且返回优先级为9的消息,然后返回优先级为8的消息,依此类推。因此,如果队列传递顺序设置为优先级,您将无法有选择地浏览每个优先级中的第一条消息,而是必须进行浏览,直到找到第一条优先级为0的消息,才能知道您已在队列上看到最早的消息

可能值得回顾中的方法,以了解如何查询队列属性。如果队列是FIFO,只需浏览第一条消息。如果没有,请浏览保存从每个优先级获得的第一条消息的队列长度,将时间戳与来自更高优先级的任何消息进行比较,并丢弃较新的消息

请注意,交易将影响您浏览邮件的能力。在syncpoint下保存的任何邮件都将无法浏览。将返回不在同步点下的最旧消息


最后,如果您试图确定队列事件或统计信息的运行状况,则可以提供您需要的信息,并避免深入队列浏览的开销。

如果队列是FIFO,则浏览将返回最早的消息。但是,如果队列设置为优先级传递,则必须浏览队列,直到找到优先级最低的第一条消息。您的代码段表明这是一个事件队列。如果这是指SYSTEM.*.EVENT队列,则它们应始终处于FIFO模式。即使管理员将其更改为优先级传递,所有系统事件消息都以相同的优先级生成

使用优先级排序的消息所面临的困难是,您可以忽略较低的优先级,但不能忽略较高的优先级。例如,如果在浏览时指定优先级为5,并且任何消息的优先级为4或更低,则不会返回这些消息。但是将返回消息或更高优先级的消息,不仅返回优先级为5的消息,而且返回优先级为9的消息,然后返回优先级为8的消息,依此类推。因此,如果队列传递顺序设置为优先级,您将无法有选择地浏览每个优先级中的第一条消息,而是必须进行浏览,直到找到第一条优先级为0的消息,才能知道您已在队列上看到最早的消息

可能值得回顾中的方法,以了解如何查询队列属性。如果队列是FIFO,只需浏览第一条消息。如果没有,请浏览保存从每个优先级获得的第一条消息的队列长度,将时间戳与来自更高优先级的任何消息进行比较,并丢弃较新的消息

请注意,交易将影响您浏览邮件的能力。在syncpoint下保存的任何邮件都将无法浏览。将返回不在同步点下的最旧消息

最后,如果您试图确定队列的运行状况,则事件或统计信息可能会提供您所需的信息,并避免深入队列浏览的开销