簡單消息監聽內容
這個類非常的強大,我們可以對它就行很多設置,對於消費者的配置項,這個類都可以滿足。
1.設置事務特性、事務管理器、事務屬性、事務容量(併發)、是否開啓事務、回滾消息等。
2.設置消費者數量、最小最大數量、批量消費。
3.設置消息確認和自動確認模式、是否迴歸隊列、異常捕獲handler函數。
4.設置消費者標籤生成策略、是否獨佔模式、消費者屬性等。
5.設置具體的監聽器、消息轉換器等等。
注意:SimpleMessageListenerContainer可以進行動態設置,比如在運行中的應用可以動態的修改其消費者數量的大小、接受消息的模式等。
很多基於RabbitMQ的自制定製化後端管控臺在進行動態設置的時候,也是根據這一特性去實現的。可以看出SpringAMQP非常的強大。
測試SimpleMessageListenerContainer demo,在RabbitMQConfig中添加如下代碼
@Bean
public SimpleMessageListenerContainer messageContainer(ConnectionFactory connectionFactory) {
SimpleMessageListenerContainer container = new SimpleMessageListenerContainer(connectionFactory);
//設置監聽隊列
container.setQueues(queue001(), queue002(), queue003(), queue_image(), queue_pdf());
container.setConcurrentConsumers(1);
container.setMaxConcurrentConsumers(5);
//是否有重複隊列
container.setDefaultRequeueRejected(false);
//設置簽收模式
container.setAcknowledgeMode(AcknowledgeMode.AUTO);
container.setExposeListenerChannel(true);
//設置消費者標籤
container.setConsumerTagStrategy(new ConsumerTagStrategy() {
@Override
public String createConsumerTag(String queue) {
return queue + "_" + UUID.randomUUID().toString();
}
});
//設置默認消息監聽
container.setMessageListener(new ChannelAwareMessageListener() {
@Override
public void onMessage(Message message, Channel channel) throws Exception {
String msg = new String(message.getBody());
System.err.println("----------消費者: " + msg);
}
});
return container;
}
啓動項目
觀察控制檯
1個連接,5個消費者,和代碼定義一樣
觀察Channel信息
5個消費與代碼定義一致
測試消息消費
啓動之前的testSendMessage2()發送幾條消息
觀察控制檯消費了發送的三條消息