rabbitmq c++ rpc

rabbitmq网上很多都不是使用的c++语言


然后自己研究了一下

c->s s->c其实主要是listen端的代码,因为其他的看官方的demo就可以


listen端添加的代码

amqp_basic_properties_t props;
            sleep(2);
            amqp_basic_publish(conn,
                               1,
                               amqp_cstring_bytes(""),
                               envelope.message.properties.reply_to,
                               0,
                               0,
                               &props,
                               amqp_cstring_bytes("200 OK"));

在接受到客户端的消息就可以进行处理


### 使用RabbitMQC++ 为了在C++项目中集成并使用RabbitMQ,开发者通常会选择官方支持的客户端库之一。对于C++而言,最常用的选项是`rabbitmq-c`这个基于AMQP协议实现的原生C语言客户端[^1]。 #### 安装依赖 安装必要的开发工具包以及配置环境变量来编译和链接程序之前,确保操作系统已经正确设置了构建环境。以Ubuntu为例: ```bash sudo apt-get update && sudo apt-get install -y cmake libssl-dev ``` 接着下载并编译`rabbitmq-c`源码仓库中的最新稳定版本[^2]: ```bash git clone https://github.com/alanxz/rabbitmq-c.git cd rabbitmq-c mkdir build && cd build cmake .. make sudo make install ``` #### 发布消息到队列 下面是一个简单的例子展示怎样发送一条消息至指定名称的消息队列内: ```cpp #include <iostream> #include <amqp.h> #include <amqp_tcp_socket.h> int main() { amqp_connection_state_t conn; int status; // 创建连接对象实例化 conn = amqp_new_connection(); struct amqp_rpc_reply_t reply; struct amqp_channel_open_ok_t *channel_res; // 建立TCP套接字通信链路 amqp_socket_t* socket = amqp_tcp_socket_new(conn); if (!socket) { std::cerr << "Creating TCP socket failed\n"; return 1; } status = amqp_socket_open(socket, "localhost", 5672); // 连接到本地服务器,默认端口为5672 if (status < 0) { std::cerr << "Opening TCP connection failed\n"; return 1; } // 登录虚拟主机"/" reply = amqp_login(conn, "/", AMQP_DEFAULT_MAX_CHANNELS, AMQP_DEFAULT_FRAME_SIZE, 0, AMQP_SASL_METHOD_PLAIN, "guest", "guest"); if (reply.reply_type != AMQP_RESPONSE_NORMAL) { std::cerr << "Logging in failed\n"; return 1; } uint16_t channel_id = 1; amqp_channel_open(conn, channel_id); char const* exchange_name = ""; char const* routing_key = "hello"; amqp_basic_properties_t props; props._flags = AMQP_BASIC_CONTENT_TYPE_FLAG | AMQP_BASIC_DELIVERY_MODE_FLAG; props.content_type = amqp_cstring_bytes("text/plain"); props.delivery_mode = 2; /* persistent delivery mode */ amqp_basic_publish( conn, /* the connection */ channel_id, /* default channel */ amqp_cstring_bytes(exchange_name),/* no name */ amqp_cstring_bytes(routing_key), 0, /* mandatory */ 0, /* immediate */ &props, amqp_cstring_bytes("Hello World!") ); printf(" [x] Sent 'Hello World!'\n"); sleep(1); amqp_channel_close(conn, channel_id, AMQP_REPLY_SUCCESS); amqp_connection_close(conn, AMQP_REPLY_SUCCESS); amqp_destroy_connection(conn); return 0; } ``` 此段代码展示了创建一个新的连接、登录认证过程、打开信道(Channel),最后通过调用`amqp_basic_publish()`函数向名为“hello”的路由键所对应的队列发布了一条字符串形式的消息:"Hello World!"[^3]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值