一.RabbitTemplate介紹
RabbitTemplate:訊息模板,在與Spring AMQP整合時,進行傳送訊息的關鍵類。
包括了可靠性投遞訊息方法、回撥監聽訊息介面ConfirmCallBack、返回值確認介面ReturnCallBack等,同樣需要進行注入到ioc容器中。
與spring整合需要例項化,與spring boot整合只需要在配置檔案中配置就好了
相關配置
@Bean public RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory){ return new RabbitTemplate(connectionFactory); }
測試
傳送訊息
@Test public void testSend1(){ rabbitTemplate.convertAndSend("amqp.bean.topic", "amqp.send","hello spring"); }
結果:
測試2:
@Test public void testSend(){ //建立訊息 MessageProperties properties = new MessageProperties(); properties.getHeaders().put("send.amqp","測試傳送資訊"); Message message = new Message("hello spring amqp".getBytes(), properties); //傳送 rabbitTemplate.convertAndSend("amqp.bean.topic", "amqp.send", message, message1 -> { System.out.println("新增額外的設定"); message1.getMessageProperties().getHeaders().put("extra","額外資訊"); return message1; }); }
測試結果:
二.SimpleMessageListenerContainer介紹
簡單訊息容器,對於消費者的配置項,這個類可以滿足
監聽多個佇列、自動啟動、自動宣告,事務設定,設定消費者屬性,批量消費、設定訊息確認和自動確認模式、重回佇列,異常捕獲handler函式,消費者標籤生成測虐,多佔模式,設定監聽器、轉換器。
SimpleMessageListenerContainer可以進行動態設定,在執行的應用中動態修改其消費者數量的大小、接收訊息模式等
配置:
@Bean public SimpleMessageListenerContainer simpleMessageListenerContainer(ConnectionFactory connectionFactory){ SimpleMessageListenerContainer container = new SimpleMessageListenerContainer(connectionFactory); //設定監聽的佇列 container.setQueues(queue()); //設定當前消費者數量 container.setConcurrentConsumers(1); container.setMaxConcurrentConsumers(5); //重回佇列 container.setDefaultRequeueRejected(false); //簽收機制 container.setAcknowledgeMode(AcknowledgeMode.AUTO); //消費端標籤策略 container.setConsumerTagStrategy(queue-> queue+"_"+ UUID.randomUUID().toString()); //訊息監聽 container.setMessageListener((ChannelAwareMessageListener) (message, channel) -> System.out.println(new String(message.getBody()))); return container; }
執行springboot主應用,
可以看到在rabbitmq的控制檯中,有Container監聽的佇列。