整理自:RabbitMQ实战指南.朱忠华
1 简介
RabbitMQ
中的交换机、交换机类型、队列、绑定、路由键等都遵循AMQP
协议中相应的概念。
AMQP
是应用层的协议,包括三层:
Module Layer
:位于协议最高层,主要定义了一些供客户端调用的命令,客户端可以利用这些命令实现自己的业务逻辑。例如,客户端可以使用Queue.Declare
命令声明一个队列或者使用Basic.Consume
订阅一个队列中的消息。Session Layer
:位于中间层,主要负责将客户端的命令发送给服务器,再将服务器的应答返回给客户端,为客户端与服务器之间的通信提供可靠性同步机制和错误处理。Transport Layer
:位于最底层,主要传输二进制数据流,提供帧处理、信道复用、错误检测和数据表示等。
2 AMQP生产者流转过程
生产者代码:
// 创建连接
Connection connection = factory.newConnection();
// 创建信道
Channel channel = connection.createChannel();
String message = "Hello World!";
// 发送消息
channel.basicPublish("exchange", "routingKey",
MessageProperties.PERSISTENT_TEXT_PLAIN,
message.getBytes());
// 关闭资源
channel.close();
connection.close();
说明:
- 创建连接,涉及到的命令包括:
Connection.Start
/Connection.Start-OK
、Connection.Tune
/Connection.Tune-OK
、Connection.Open
/Connection.Open-OK
。 - 创建信道,涉及到的命令包括:
Channel.Open
/Channel.Open-Ok
。 - 发送消息,涉及到的命令包括:
Basic.Publish
。 - 关闭资源,涉及到的命令包括:
Channel.Close
/Channel.Close-Ok
、Connection.Close
/Connection.Close-Ok
。
3 AMQP消费者流转过程
消费者代码:
// 创建连接
Connection connection = factory.newConnection();
// 创建信道
Channel channel = connection.createChannel();
// 消费者订阅消息
Consumer consumer = new DefaultConsumer(channel) {...}
channel.basicQos(64);
channel.basicConsume("queue", consumer);
// 关闭资源
channel.close();
connection.close();
说明:
- 创建连接,涉及到的命令包括:
Connection.Start
/Connection.Start-OK
、Connection.Tune
/Connection.Tune-OK
、Connection.Open
/Connection.Open-OK
。 - 创建信道,涉及到的命令包括:
Channel.Open
/Channel.Open-Ok
。 - 使用
channel.basicQos(int prefetchCount)
设置消费客户端最大能保持的未确认消息数,涉及到的命令包括:Basic.Qos
/Basic.Qos-Ok
。 - 订阅消息,涉及到的命令包括:
Basic.Consume
/Basic.Consume-Ok
、Basic.Deliver
/Basic.Ack
。 - 关闭资源,涉及到的命令包括:
Channel.Close
/Channel.Close-Ok
、Connection.Close
/Connection.Close-Ok
。