操作场景
本文以调用 C++ SDK 为例介绍通过开源 SDK 实现消息收发的操作过程,帮助您更好地理解消息收发的完整过程。
前提条件
- 完成资源创建与准备
- 下载 Demo
操作步骤
步骤1:环境准备
- 安装客户端相关的库 C and C++ 库, 本文以 AMQP-CPP 为例。
- 导入动态库和头文件。
步骤2:生产消息
建立连接。
auto evbase = event_base_new(); LibEventHandlerMyError hndl(evbase); // 建立连接 AMQP::TcpConnection connection(&hndl, AMQP::Address( "amqp://admin:eyJrZXlJZC...@amqp-xxx.rabbitmq.ap-sh.public.xxxxxtdmq.com:5672/amqp-xxx|vhost-cpp")); // 服务地址格式为 amqp://username:password@host:port/vhost // 建立通道 AMQP::TcpChannel channel(&connection); channel.onError([&evbase](const char *message) { std::cout << "Channel error: " << message << std::endl; event_base_loopbreak(evbase); });参数 说明 host 集群接入地址,在集群基本信息页面的客户端接入模块获取。 
port 集群接入地址中的端口号。 username 用户名称,填写在控制台创建的用户名称。 password 用户密码,填写在控制台创建用户时填写的密码。 vhost Vhost 名称,在控制台 Vhost 列表获取。 发送消息。
// 声明交换机 channel.declareExchange(exchange_name, AMQP::ExchangeType::direct); // 发送消息到交换机 channel.publish(exchange_name, routing_key, "Hello client this is a info message"); event_base_dispatch(evbase); event_base_free(evbase);参数 说明 exchange_name Exchange 名称,可在控制台 Exchange 列表获取。 routing_key 消息队列支持的routing key
步骤3:消费消息
建立连接。
ConnHandler handler; // 建立连接 AMQP::TcpConnection connection(handler, AMQP::Address(host, part, AMQP::Login(username, password), vhost)); // 建立通道 AMQP::TcpChannel channel(&connection); channel.onError([&handler](const char *message) { std::cout << "Channel error: " << message << std::endl; handler.Stop(); });参数 说明 host 集群接入地址,在集群基本信息页面的客户端接入模块获取。 
port 集群接入地址中的端口号。 username 用户名称,填写在控制台创建的用户名称。 password 用户密码,填写在控制台创建用户时填写的密码。 vhost Vhost 名称,在控制台 Vhost 列表获取。 声明交换机、消息队列,并将消息队列绑定到交换机。
// 声明交换机 channel.declareExchange(exchange_name, AMQP::ExchangeType::direct); // 声明消息队列 channel.declareQueue(queue_name, AMQP::durable); // 绑定消息队列到交换机 channel.bindQueue(exchange_name, queue_name, routing_key);参数 说明 exchange_name Exchange 名称,可在控制台 Exchange 列表获取。 queue_name 消息队列名称,可在控制台 Queue 列表获取。 routing_key 消息队列支持的 routing key 订阅消息。
// 订阅消息 channel.consume(queue_name) .onReceived ( [&channel](const AMQP::Message &msg, uint64_t tag, bool redelivered) { // 处理消息 std::cout << "Received: " << msg.body() << std::endl; // 回复ack, 消费失败可回复reject channel.ack(tag); } ); handler.Start();参数 说明 queue_name 消息队列名称,可在控制台 Queue 列表获取。
说明
完整示例或其他使用可参考 Demo 或者 AMQP-CPP 和 AMQP-CPP 示例

