查询Mule ESB VM队列中的消息数

查询Mule ESB VM队列中的消息数,mule,Mule,在Mule流中,我想添加一个异常处理程序,在出现异常时将消息转发到“重试队列”。但是,我不希望这个重试逻辑自动运行。相反,我希望收到一个通知,这样我就可以查看错误,然后决定是否重试队列中的所有消息 我不想收到每个异常的通知。我希望有一个每15分钟运行一次的计划作业,检查此重试队列中是否有消息,然后仅在有消息时发送通知 有没有办法确定一个持久VM队列中当前有多少条消息 假设您使用默认的VM队列持久性机制,并且VM连接器的名称为vmConnector,则可以执行以下操作: final String

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

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


有没有办法确定一个持久VM队列中当前有多少条消息

假设您使用默认的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
将直接对消息计数。