一、订阅模式
在fanout模式中,一条消息会被所有订阅的队列消费。但是,在某些场景下,我们希望不同的消息被不同的队列消费。这时就要用到Direct类型的Exchange
在Direct模式下:
- 队列与交换机的绑定,不能是任意绑定了,而是要指定一个RoutingKey(路由key)
- 消息的发送方在Exchange发送消息时,也必须指定消息的RoutingKey
- Exchange不再把消息交给每一个绑定的队列,而是根据RoutingKey进行判断,只有队列的RoutingKey与消息的RoutingKey完全一致,才可以接收到消息
生产者代码:
package direct;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import java.io.IOException;
import java.util.concurrent.TimeoutException;
/**
* @author wmh
* @date 2021/1/12
*/
public class Provider {
public static void main(String[] args) throws IOException, TimeoutException {
// 创建连接工厂
ConnectionFactory connectionFactory = new ConnectionFactory();
connectionFactory.setHost("主机名称");
connectionFactory.setPort(5672);
// 为mq服务绑定主机
connectionFactory.setVirtualHost("/ems");
connectionFactory.setUsername("ems");
connectionFactory.setPassword("123");
// 创建连接
Connection connection = connectionFactory.newConnection();
// 创建连接通道
Channel channel = connection.createChannel(