[TOC]
# 1. 交换机概念
:-: ![](https://img.kancloud.cn/09/e7/09e74be6d71dc1eaa0a66c028515d430_1227x587.jpg)
RabbitMQ工作原理
RabbitMQ 消息传递模型的核心思想是: **生产者生产的消息从不会直接发送到队列**。实际上,通常生产者甚至都不知道这些消息传递到了哪些队列中。
<br/>
相反,**生产者只能将消息发送到交换机(exchange)**,交换机工作的内容非常简单,一方面它接收来自生产者的消息,另一方面将它们推入队列。
<br/>
交换机必须确切知道如何处理收到的消息,是应该把这些消息放到特定队列还是把他们放到许多队列中,还是说应该丢弃它们。这就的由交换机的类型来决定。
<br/>
# 2. 临时队列
之前我们使用的是具有特定名称的队列如`hello` 和 `ack_queue`。队列的名称对我们来说至关重要,我们需要指定我们的消费者去消费哪个队列的消息。
```java
private final static String QUEUE_NAME = "hello";
private static final String TASK_QUEUE_NAME = "ack_queue";
```
每当我们连接到 RabbitMQ 时,我们都需要一个全新的空队列,为此我们可以创建一个具有随机名称的队列,或者能让服务器为我们选择一个**随机队列名称**那就更好了。其次**一旦我们断开了消费者的连接,队列将被自动删除**。创建临时队列的方式如下:
```java
//声明一个临时队列
com.rabbitmq.client.AMQP.Queue.DeclareOk tempQueue = channel.queueDeclare();
//获取临时队列名
String queueName = tempQueue.getQueue();
```
创建出来的临时队列名称类似下面的字符串。
![](https://img.kancloud.cn/85/8e/858ecaf4d7c31598890f40e0d96ae95b_1351x301.jpg)
<br/>
# 3. binding(绑定)
绑定其实是 exchange 和 queue 之间的桥梁,它告诉我们 exchange 和哪个队列进行了绑定关系。比如说下面这张图告诉我们的就是 X 与 Q1 和 Q2 进行了绑定。
![](https://img.kancloud.cn/46/d1/46d1d62a5f59b8acf21e889efa38e230_1415x243.jpg)
- 消息队列
- 什么是MQ
- MQ的作用
- MQ的分类
- MQ的选择
- RabbitMQ
- RabbitMQ是什么
- 四大核心概念
- 工作原理
- 环境搭建
- windows系统下的搭建
- centos7系统下的搭建
- 常用命令
- 服务相关命令
- 管理用户命令
- 管理队列命令
- 第一个RabbitMQ程序
- 工作队列
- 轮询分发消息
- 消息应答
- 持久化
- 发布确认
- 发布确认原理
- 发布确认策略
- 交换机概念
- 交换机类型
- 无名交换机
- Fanout交换机
- Direct交换机
- Topic交换机
- 死信队列
- 死信概念
- 死信来源
- 死信实战
- 延迟队列
- 什么是延迟队列
- TTL设置方式
- 队列TTL延迟队列
- 消息TTL延迟队列
- 插件打造延迟队列
- 延迟队列总结
- 发布确认高级
- 代码实现
- 回退消息
- 备份交换机
- 幂等性
- 幂等性概念
- 消息重复消费
- 消费端幂等性保障
- 优先级队列
- 使用场景
- 设置优先级
- 惰性队列
- 什么是惰性队列
- 队列的两种模式
- 声明惰性队列
- RabbitMQ集群
- 为什么要搭建集群
- 集群搭建步骤
- 集群工作方式
- 脱离集群
- 镜像队列
- 高可用负载均衡