SpringAMQP 之 RabbitTemplate

RabbitTemplate 即消息模板

它是在之前于 SpringAMQP 整合的時候進行發送消息的關鍵類。

它提供了豐富的發送消息方法,包括可靠性投遞消息方法、回調監聽消息接口 ConfirmCallback、返回值確認接口 ReturnCallback 等等。同樣我們需要進行注入到 Spring 容器中,然后直接使用。RabbitTemplate 在 Spring 整合時需要實例化,但是在 Springboot 整合時,在配置文件里添加配置即可。

代碼示例:

代碼地址:  https://github.com/hmilyos/rabbitmqdemo.git  rabbitmq-api 項目下

先實例化 RabbitTemplate

在 RabbitMQConfig 里面加上:
    @Bean //connectionFactory 也是要和最上面方法名保持一致
    public RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory) {
        RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory);
        return rabbitTemplate;
    }

然后就在單元測試類 RabbitmqApiApplicationTests 里面寫個方法發送消息

    @Autowired
    private RabbitTemplate rabbitTemplate;
    
    @Test
    public void testSendMessage() throws Exception {
        //1 創建消息
        MessageProperties messageProperties = new MessageProperties();
        messageProperties.getHeaders().put("desc", "信息描述..");
        messageProperties.getHeaders().put("type", "自定義消息類型..");
        Message message = new Message("Hello RabbitMQ".getBytes(), messageProperties);

        rabbitTemplate.convertAndSend("topic001", "spring.amqp", message, new MessagePostProcessor() {
            @Override  // message 就是上面聲明要發送的消息
            public Message postProcessMessage(Message message) throws AmqpException {
                log.info("------添加額外的設置---------");
                message.getMessageProperties().getHeaders().put("desc", "額外修改的信息描述");
                message.getMessageProperties().getHeaders().put("attr", "額外新加的屬性");
                return message;
            }
        });
    }

運行單元測試,上管控臺查看消息是否發送到queue里面了。如下圖所示,queue接收到消息了。

image
image

在queue里面獲取一下消息,看到額外設置的東西


image

改進一下代碼,發送三個不同routingkey的消息

    @Test
    public void testSendMessage2() throws Exception {
        //1 創建消息
        MessageProperties messageProperties = new MessageProperties();
        messageProperties.setContentType("text/plain");
        Message message = new Message("mq 消息1234   --spring.abc".getBytes(), messageProperties);

        rabbitTemplate.send("topic001", "spring.abc", message);

        rabbitTemplate.convertAndSend("topic001", "spring.amqp", "hello object message send!   -spring.amqp");
        rabbitTemplate.convertAndSend("topic002", "rabbit.abc", "hello object message send!  -rabbit.abc");
    }

再次啟動測試方法,上管控臺查看一下消息,本次發送了三條,加上之前未消費的一條,根據路由規則交換機 topic001 綁定 spring.* 所以 queue001 有三條消息,queue002有一條消息。


image

image

再嚴謹的獲取一下消息內容進行確認

image

自此 RabbitTemplate 的 demo 演示完畢。

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • http://liuxing.info/2017/06/30/Spring%20AMQP%E4%B8%AD%E6%...
    sherlock_6981閱讀 15,979評論 2 11
  • Swift1> Swift和OC的區別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴謹 對...
    cosWriter閱讀 11,132評論 1 32
  • Spring整合rabbitmq實踐(一):基礎Spring整合rabbitmq實踐(三):源碼 3. 擴展實踐 ...
    jinchaolv閱讀 10,122評論 1 7
  • 序言 目前形勢,參加到iOS隊伍的人是越來越多,甚至已經到供過于求了。今年,找過工作人可能會更深刻地體會到今年的就...
    SunnyLeong閱讀 679評論 1 11
  • 1.得到參與團隊的支持 2.得到資金提供方的支持 3.滿足當前期望的改動幅度,匹配當前項目的排期計劃 4.滿足當前...
    張云錢閱讀 334評論 0 0