Spring RabbitMQ生产消费消息笔记

本文介绍了Spring RabbitMQ的使用,包括MQ的基本概念、消息流程、虚拟主机、消息消费者和生产者的实现。重点讲解了如何创建监听容器、定义监听方法,并展示了如何处理多VirtualHost的场景。此外,还提到了RabbitTemplate在消息生产中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

为了实现服务的异步操作,比较常用的就是消息队列了,之前一直是依葫芦画瓢的调包侠客,这次还是稍微的了解了一下在Spring如何使用RabbitMQ实现消息的收发。

MQ介绍

消息流程

一条消息从生产者出发到消费者之间经历的流程如下图:
message.jpeg
消息进入交换机后会绑定一个Route Key然后根据交换机的匹配模式发送到对应Binding Key的Queue中。
匹配模式主要有三种
1.Direct 路由模式 根据Route Key全文匹配Binding Key去寻找队列。
2.Fanout 广播模式 发送到交换机的消息都会被转发到与该交换机绑定的所有队列上。
3.Topic 根据通配符,发送到匹配队列。

虚拟主机(virtual_host)

什么是virtual_host

消息消费者

一、监听容器的创建

接收消息可以使用Spring提供的@RabbitListener注解

想要用@RabbitListener接收消息的需要创建SimpleRabbitListenerContainerFactory,默认情况下,基础组件将查找名为rabbitListenerContainerFactory的bean作为工厂用于创建消息监听器容器的源。

@Bean("customizeContainerFactory")
    public SimpleRabbitListenerContainerFactory rabbitListenerContainerFactory(
            ConnectionFactory connectionFactory,
            @Qualifier(RABBIT_TASK_EXECUTOR) TaskExecutor taskExecutor) {
   
   
        SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
        factory.setConnectionFactory(connectionFactory);
        factory.setAcknowledgeMode(AcknowledgeMode.MANUAL);
        factory.setTaskExecutor(taskExecutor);
        factory.setMessageConverter(new Jackson2JsonMessageConverter(getObjectMapper(enumPropName)));
        return factory;
    }

不管是接收还是发送消息都需要使用ConnectionFactory在上面的代码中使用了Spring抽象的ConnectionFactory。SimpleRabbitListenerContainerFactory可以设置Ack模式,消息转换器等。

二、监听方法

i.@RabbitListener加在接收消息的方法上,该注解可以用来定义MQ中不存在的queueexchangeroute keybinding key

  public class Consumer {
   
   
    @RabbitListener(containerFactory = "customizeContainerFactory", 
                    bindings = @QueueBinding(value = @Queue(value = "queue_name", durable = true),
                    exchange = @Exchange
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值