【问题标题】:How to discard Tibco EMS messages from a queue (consumer side)如何丢弃队列中的 Tibco EMS 消息(消费者端)
【发布时间】:2023-03-08 15:00:01
【问题描述】:

我正在使用队列中的 Tibco JMS (EMS) 消息...我想在每次应用程序运行时清除队列。我可以想到以下逻辑...我认为他们可能是更好的方法

public void clearMessages() throws JMSException{

        Message msg = (Message) queueReceiver.receiveNoWait();
        while(msg != null)
        {
            clearMessages();
        }

        return;
    }

【问题讨论】:

  • 不要使用递归......如果队列中有数千条消息......延迟可能会更糟,系统的稳定性可能会受到影响。 (最坏的情况,您的应用程序可能会崩溃)。将 receiveNoWait 放在 while...

标签: java queue jms message-queue tibco


【解决方案1】:

选项 1:您单独确认每条消息;但是,如果您有(许多)数千条消息排队,这种方法可能需要一些时间:

public void clearMessages() throws JMSException{
    Message message = null;
    do {
        message = consumer.receiveNoWait();
     if (message != null) message.acknowledge();
    }
    while (message != null);
}

选项 2:使用 TibjmsAdmin 对象清除 JMS 目标是这样完成的(单击 TIBCO EMS Admin Java API 获取 JavaDoc):

public void clearMessages(String queueName) throws TibjmsAdminException, TibjmsAdminInvalidNameException{
    TibjmsAdmin jmsAdmin = new TibjmsAdmin("tcp://localhost:7222", "admin", "admin");
    jmsAdmin.purgeQueue(queueName);
    // alternatively purge all queues:
    // jmsAdmin.purgeQueues(">");
}

HTH,

亨德里克

【讨论】:

  • 我是 tibco EMS 的新手,只知道使用 tibco jsm 活动,如 jms 队列发送者、jms 主题发布者等。我看过你的很多答案,你给出的答案是 java 代码。你能告诉我我将如何在 tibco EMS 中使用 java 代码。例如,我将在哪里使用上述(这个答案)java ems 代码?
  • 我想您指的是如何在 TIBCO BusinessWorks 中使用 Java。请看 TIBCO BW 的 Java Code Activity (docs.tibco.com/pub/activematrix_businessworks/5.12.0/doc/html/…)
  • 感谢回复,这是我的stacoverflow聊天室chat.stackoverflow.com/rooms/44929/…你能过来讨论一下吗
猜你喜欢
  • 1970-01-01
  • 2020-05-10
  • 2015-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-26
相关资源
最近更新 更多