SpringAMQP 之 RabbitTemplate

RabbitTemplate 即消息模板

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

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

代碼示例:

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

先實例化 RabbitTemplatespring

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

而後就在單元測試類 RabbitmqApiApplicationTests 裏面寫個方法發送消息api

@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接收到消息了。bash

在queue裏面獲取一下消息,看到額外設置的東西
改進一下代碼,發送三個不一樣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有一條消息。 ide

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

自此 RabbitTemplate 的 demo 演示完畢。
相關文章
相關標籤/搜索