一. Channel类
1.创建Channel对象来创建与AMQP代理的连接
static ptr_t Create (const std::string &host="127.0.0.1",
int port=5672,
const std::string &username="guest",
const std::string &vhost="/",
int frame_max=131072)
host: 主机名或者AMQP代理的IP地址
port: 连接AMQP代理的接口
username: 用于认证AMQP代理的用户
password: 用户的密码
vhost: 我们要连接的AMQP的虚拟主机
frame_max: 框架的最大值
2.在AMQP代理中创建一个队列(若存在便是声明)
std::string AmqpClient::Channel::DeclareQueue(const std::string & queue_name,
bool passive,
bool durable,
bool exclusive,
bool auto_delete,
const Table & arguments
)
queue_name: 队列的名字, 不能定义相同名字的队列(指的是名字相同性质却不同), 如果为空字符串, 则AMQP ` 会给我们生成一个临时队列, 它有一个系统给的名字
passive: 如果为true, 但是队列之前并不存在, 就会返回false
durable: 耐用性, 如果为true, 在AMQP代理restart后仍然存在, 为false就不存在了
exclusive: 专用的, 只有唯一的client可以使用队列, 当连接断开后队列将被删除
auto_delete: 当没有exchange绑定queue后, 队列将被删除
arguments: 声明队列时需要的额外参数
3.传递消息给exchange
void AmqpClient::Channel::BasicPublish(const std::string & exchange_name,
const std::string & routing_key,
const BasicMessage::ptr_t message,
bool mandatory = false,
bool immediate = false
)
exchange_name: 要接收消息的exchange
routing_key: 发消息时附带的路线值, 是为了发送到正确的队列
message: 含有消息的 BasicMessage 对象
mandatory: 若为true, 强制性, 如果消息不能给到指定队列会抛出异常
immediate: 若为true, 消费者不能快速拿到消息会抛出异常
图中的error. info. warning就是routing_key, x就是exchange
4.消费消息
std::string AmqpClient::Channel::BasicConsume(const std::string & queue,
const std::string & consumer_tag = "",
bool no_local = true,
bool no_ack = true,
bool exclusive = true,
boost::uint16_t message_prefetch_count=1
)
queue: 订阅的队列的名称
consumer_tag: 消费者的名称
no_local: 官方文档没有解释...
no_ack: 若为false, 当消息收到后会通知队列
exclusive: 若为true, 则只有这个消费者可以订阅这个队列
message_prefetch_count: AMQP代理会发送的未确认接收的消息的次数, 值为0意为没有限制, 如果超过1
` ,AMQP代理就可以在消息被一个用户处理时(还没处理完)继续发给另一个用户, 谁
` 先处理完给谁
5.从使用这个channel的消费者拿到消息
bool AmqpClient::Channel::BasicConsumeMessage(Envelope::ptr_t & envelope,
int timeout = -1
)
envelope: 接受的消息对象
timeout: 接收消息等待的时间(单位是毫秒), 0为非阻塞(瞬间)读, -1为不限时长
二. BasicMessage类
static ptr_t AmqpClient::BasicMessage::Create(const std::string & body)
2.获得消息内容
std::string AmqpClient::BasicMessage::Body() const
三.Envelope类
BasicMessage::ptr_t AmqpClient::Envelope::Message() const