详细接口介绍如下 http://www.squaremobius.net/amqp.node/channel_api.html
1、Exchange Type
RabbitMQ的Exchange Type有direct、fanout、topic、headers这四种,用户将消息发给交换器,交换器根据交换类型,发送给对应的队列。
direct
https://github.com/fengyh13/rabbitmq_test/blob/master/direct
fanout
https://github.com/fengyh13/rabbitmq_test/tree/master/fanout
topic
https://github.com/fengyh13/rabbitmq_test/tree/master/topic
headers
不常用
2、
下边这种方式不指定绑定交换器,是因为系统有一个默认交换器,没有指定的队列会绑定到默认的交换器上,之后的操作就同上边一样。
https://github.com/fengyh13/rabbitmq_test/tree/master/work
3、持久化
交换器、队列、消息都可以做持久化,这样在服务重启之后就不会清空{durable: true}
如:https://github.com/fengyh13/rabbitmq_test/tree/master/work/receive.js 代码中的队列持久化
let ok = await ch.assertQueue(queueName, {durable: true});
4、可靠性
消费者在从队列取出消息的时候可以设置是否需要回复。如果设置了不需要回复,消费者从队列里取出消息后,消息将被删除。如果设置了需要回复,只有在消费者回复之后才会将消息从队列里删除;如果没有回复,消费者从队列取出信息的操作会被堵塞,直到消费者回复了之后,才可以继续从队列取出信息。
如: https://github.com/fengyh13/rabbitmq_test/tree/master/work/receive.js 代码中的
ch.ack(msg);
5、有效期、长度、优先级
队列、消息都可以设置有效期,即超时之后会被自动删除
//创建队列
let ok = await ch.assertQueue(q, {
durable: true, //持久化
messageTtl: 10000, //队列里所有消息的有效期 10000ms
expires: 10000, //队列的有效期,超时队列被删除,消息也被删除 10000ms
maxLength: 100, //队列的最大长度 为100
maxPriority: 10 //设置队列支持的优先级,最多支持10个优先级,发送消息到该队列可以设置有优先级
});
//往指定队列发送消息
await ch.sendToQueue(q, Buffer.from("Hello World!"), {
deliveryMode: true,
expiration: "10000", //发送单个消息的有效期
priority: 1 //设置的优先级
,数越大优先级越大});
6、RPC
https://github.com/fengyh13/rabbitmq_test/tree/master/rpc