【问题标题】:Query for Number of Messages in Mule ESB VM Queue查询 Mule ESB VM 队列中的消息数
【发布时间】:2012-09-07 01:28:49
【问题描述】:

在 Mule 流程中,我想添加一个异常处理程序,当出现异常时将消息转发到“重试队列”。但是,我不希望这个重试逻辑自动运行。相反,我宁愿收到通知,以便我可以查看错误,然后决定是否重试队列中的所有消息。

我不想收到每个异常的通知。我宁愿有一个每 15 分钟运行一次的计划作业,并检查此重试队列中是否有消息,然后仅在有时发送通知。

有什么方法可以确定当前有多少消息在持久 VM 队列中?

【问题讨论】:

    标签: mule


    【解决方案1】:

    假设您使用默认的 VM 队列持久性机制并且 VM 连接器名为 vmConnector,您可以这样做:

    final String queueName = "retryQueue";
    int messageCount = 0;
    
    final VMConnector vmConnector = (VMConnector) muleContext.getRegistry()
        .lookupConnector("vmConnector");
    
    for (final Serializable key : vmConnector.getQueueProfile().getObjectStore().allKeys())
    {
        final QueueKey queueKey = (QueueKey) key;
        if (queueName.equals(queueKey.queueName))
        {
            messageCount++;
        }
    }
    
    System.out.printf("Queue %s has %d pending messages%n", queueName, messageCount);
    

    【讨论】:

    • 太棒了!谢谢你。我很惊讶没有更简单的方法可以做到这一点。必须遍历存储中的每条消息来计算匹配的名称是非常低效的。但只计划每 5 分钟左右运行一次此流程。
    • 默认情况下就是这样。您可以尝试将默认的QueueStore(由ListableObjectStore 支持)替换为由PartitionableObjectStore 支持的一个,每个队列名称使用不同的分区。这样,右侧分区上的allKeys().count 将直接计算消息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-09
    • 1970-01-01
    • 1970-01-01
    • 2013-04-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多