# RabbitMQ队列 **Repository Path**: blueskyfish/RabbitMQ ## Basic Information - **Project Name**: RabbitMQ队列 - **Description**: RabbitMQ队列的简单使用 - **Primary Language**: Unknown - **License**: AGPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-06-05 - **Last Updated**: 2024-06-17 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # RabbitMQ的基础知识
1.生产者Producer
消息一般包含消息体、属性、Headers,消息又成为payload;
消息的标签用来表述消息,比如交换机的名称+路由键,标签不会放入到队列中;
如果发送给交换机的消息没有任何路由规则匹配,则会被丢弃

2.消费者Consumer

3.队列Queue
多个消费者可以同时订阅一个队列,这个队列中的消息会被平均分摊给每个消费者(Rount-Robin),而不是所有的消费者都能得到所有的消息;RabbitMQ不支持队列层面的广播消费;如果需要可以将消息投递到多个队列。

## SpringBoot RabbitMQ # 交换机Exchange * 如果发送给交换机的消息没有任何路由规则匹配,则会被丢弃 1. 类型type * 扇形交换机fanout Exchange:又称广播交换机,交换机收到消息后就会传给所有与它绑定的队列 * 直连交换机direct Exchange 队列Queue与之绑定时需要声明绑定的routingKey,往交换机发送消息时也需要指定routingKey,只有发送消息时指定的routingKey与绑定时的完全一致的队列Queue才会收到消息 * 主题队列topic Exchange 和直连交换机类型,绑定时的routingKey可以是表达式,发送消息时指定的routingKey如果匹配绑定时的,则就可以发送到相应的队列 表达式的模糊匹配符号主要是#和*,#匹配一个或者多个词组,词组是指以点.分割的单词,比如user.# # 可以匹配到 user.add user.add.batch 只能匹配一个词组,例如user.* 只能匹配到 user.add ,不能匹配到 user.add.batch * 头部交换机headers Exchange 发送消息时,可以指定消息的头部参数,效率比较低,不常用 2. Durability:Durable或者Transient 持久化标识,如果为Durable,则表明此exchange为持久化的,否则只是临时的,交换机重启后消息就没有了 3. Auto delete:当最后一个绑定到exchange上的队列删除后,自定删除该exchange 4. Internal:当前exchange是否用于rabbitmq内部使用,默认为false # MQ确认机制 confirm:当消息到达Broker时触发回调,此时回调中的ack为true,否则如果消息无法正常到达Broker则ack为false return:如果设置了rabbitTemplate.setMandatory(true),则当消息没有找到对应的队列,则触发回调,如果设置了false,则当消息没有路由到任何队列,则消息会被直接丢失;如果消息正常路由,则不会触发return