tencent cloud

文档反馈

最后更新时间:2024-01-03 11:45:32

    操作场景

    本文以调用 C++ SDK 为例介绍通过开源 SDK 实现消息收发的操作过程,帮助您更好地理解消息收发的完整过程。

    前提条件

    操作步骤

    步骤1:环境准备

    1. 安装客户端相关的库 C and C++ 库, 本文以 AMQP-CPP 为例。
    2. 导入动态库和头文件。

    步骤2:生产消息

    1. 建立连接。
    auto evbase = event_base_new();
    LibEventHandlerMyError hndl(evbase);
    
    // 建立连接
    AMQP::TcpConnection connection(&hndl, AMQP::Address(
    "amqp://admin:eyJrZXlJZC...@amqp-xxx.rabbitmq.ap-sh.public.tencenttdmq.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 页面复制,格式是集群 ID + | + vhost 名称
    
    
    
    2. 发送消息。
    // 声明交换机
    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:消费消息

    1. 建立连接。
    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 页面复制,格式是集群 ID + | + vhost 名称
    
    
    
    2. 声明交换机、消息队列,并将消息队列绑定到交换机
    // 声明交换机
    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
    3. 订阅消息。
    // 订阅消息
    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 示例
    
    联系我们

    联系我们,为您的业务提供专属服务。

    技术支持

    如果你想寻求进一步的帮助,通过工单与我们进行联络。我们提供7x24的工单服务。

    7x24 电话支持