💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
[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)