rabbitmq交换机ExChange详解

Exchange分类

Direct

DirectExchange是RabbitMQ Broker的默认Exchange,在使用这个类型的Exchange时,可以不必指定routing key的名字,在此类型下创建的Queue有一个默认的routing key,这个routing key一般同Queue同名。

298

适用场景: 这种类型的Exchange,通常是将同一个message以一种循环的方式分发到不同的Queue,即不同的消费者手中

//声明交换机
channel.exchangeDeclare("exchange名", "direct");


// 由RabbitMQ自行创建的临时队列,唯一且随消费者的中止而自动删除的队列
String queueName = channel.queueDeclare().getQueue();
// 或声明创建持久队列
// String queueName = ROUTING_KEY + ".queue";
// channel.queueDeclare(queueName, false, false, true, null);

// 绑定
channel.queueBind(queueName, "exchange名", ROUTING_KEY);

Fanout

使用这种类型的Exchange,会忽略routing key的存在,直接将message广播到所有的Queue中。

299


# 声明一个交换机
// 声明一个名称为"exchange_fanout"的exchange
channel.exchangeDeclare("exchange_fanout", "fanout");
// 将消息发送给exchange
channel.basicPublish("exchange_fanout", "", null, msg.getBytes());


# 声明一个临时队列
//一个 non-durable(不持久化的), exclusive(单独的), autodelete(随着消费者的消亡自动删除的),random(随机命名)的一个队列
String queueName = channel.queueDeclare().getQueue();

# 绑定
//上面我们已经创建好了exchange,并且定义了一个临时队列,现在我要把消息从exchange推送到所有队列上,是不是该把exchange和队列绑定一下?不然exchange如何知道把消息发哪去呢
channel.queueBind("队列名", "exchange名", "");

Topic

Topic Exchange是根据routing key和Exchange的类型将message发送到一个或者多个Queue中,可以通过它来实现pub/sub模式,即发布订阅。相当于发布消息做了一个分类。

300

Headers

Headers Exchange不同于上面三种Exchange,它是根据Message的一些头部信息来分发过滤Message,忽略routing key的属性,如果Header信息和message消息的头信息相匹配,那么这条消息就匹配上了。

301

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×