一.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監聽的隊列。