3.1 RabbitMQ整合Spring AMQP實戰(四)-SimpleMessageListenerContainer

簡單消息監聽內容
這個類非常的強大,我們可以對它就行很多設置,對於消費者的配置項,這個類都可以滿足。
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()發送幾條消息
在這裏插入圖片描述
觀察控制檯消費了發送的三條消息

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章