Spring AMQP 和队列中的消息
Spring AMQP and messages in queue
在一个Spring AMQP项目中,我想实时获取RabbitMQ中某个队列中的消息数量(以根据该消息数量做出决定)(我不能使用管理插件)。
基本配置是这样的:
@Bean(name="managementServerHandler")
public ManagementServerHandler managementServerHandler(){
return new ManagementServerHandler();
}
@Bean
public MessageListenerAdapter broadcastManagementServerHandler() {
return new MessageListenerAdapter(managementServerHandler(), "handleMessage");
}
@Bean(name="broadcastManagementMessageListenerContainer")
public SimpleMessageListenerContainer broadcastManagementMessageListenerContainer()
{
SimpleMessageListenerContainer container = new SimpleMessageListenerContainer(_connectionFactory());
container.setQueueNames( REQUEST_MANAGEMENT_QUEUE );
container.setMessageListener(broadcastManagementServerHandler());
container.setAcknowledgeMode(AcknowledgeMode.AUTO);
container.setAutoDeclare(true);
container.setAutoStartup(true);
container.setConcurrentConsumers(1);
container.setRabbitAdmin((RabbitAdmin)_amqpAdmin());
container.setPrefetchCount(50);
container.setDeclarationRetries(3);
container.setMissingQueuesFatal(true);
container.setFailedDeclarationRetryInterval(1000);
container.setRecoveryInterval(400);
return container;
}
其中 "ManagementServerHandler" 只是:
public class ManagementServerHandler implements ServletContextAware, MessageListener
{
@Override
public void onMessage(Message msg)
{....}
}
我需要在 onMessage 方法中获取排队消息的数量,但找不到执行此操作的方法。
我问了这个问题,但我不知道如何获取AMQP频道:
RabbitMQ and queue data
谢谢!
使用RabbitAdmin.getQueueProperties(queue)
/**
* Returns 3 properties {@link #QUEUE_NAME}, {@link #QUEUE_MESSAGE_COUNT},
* {@link #QUEUE_CONSUMER_COUNT}, or null if the queue doesn't exist.
*/
@Override
public Properties getQueueProperties(final String queueName) {
在一个Spring AMQP项目中,我想实时获取RabbitMQ中某个队列中的消息数量(以根据该消息数量做出决定)(我不能使用管理插件)。 基本配置是这样的:
@Bean(name="managementServerHandler")
public ManagementServerHandler managementServerHandler(){
return new ManagementServerHandler();
}
@Bean
public MessageListenerAdapter broadcastManagementServerHandler() {
return new MessageListenerAdapter(managementServerHandler(), "handleMessage");
}
@Bean(name="broadcastManagementMessageListenerContainer")
public SimpleMessageListenerContainer broadcastManagementMessageListenerContainer()
{
SimpleMessageListenerContainer container = new SimpleMessageListenerContainer(_connectionFactory());
container.setQueueNames( REQUEST_MANAGEMENT_QUEUE );
container.setMessageListener(broadcastManagementServerHandler());
container.setAcknowledgeMode(AcknowledgeMode.AUTO);
container.setAutoDeclare(true);
container.setAutoStartup(true);
container.setConcurrentConsumers(1);
container.setRabbitAdmin((RabbitAdmin)_amqpAdmin());
container.setPrefetchCount(50);
container.setDeclarationRetries(3);
container.setMissingQueuesFatal(true);
container.setFailedDeclarationRetryInterval(1000);
container.setRecoveryInterval(400);
return container;
}
其中 "ManagementServerHandler" 只是:
public class ManagementServerHandler implements ServletContextAware, MessageListener
{
@Override
public void onMessage(Message msg)
{....}
}
我需要在 onMessage 方法中获取排队消息的数量,但找不到执行此操作的方法。 我问了这个问题,但我不知道如何获取AMQP频道:
RabbitMQ and queue data
谢谢!
使用RabbitAdmin.getQueueProperties(queue)
/**
* Returns 3 properties {@link #QUEUE_NAME}, {@link #QUEUE_MESSAGE_COUNT},
* {@link #QUEUE_CONSUMER_COUNT}, or null if the queue doesn't exist.
*/
@Override
public Properties getQueueProperties(final String queueName) {