rabbitmq-c客户端,github地址:https://github.com/alanxz/rabbitmq-c
rabbitmq-c是一个C语言操作的AMQP客户端库,用来与RabbitMQ broker进行交互
Building and installing:
需要:CMake2.6或以上版本
1、下载安装包后解压,进入主目录,
2、mkdir build && cd build
3、cmake ..
4、cmake --build .
完成后,build目录下会出现librabbitmq、examples 和 tests 子目录。其中librabbitmq中包含生成的librabbitmq.so等文件;examples中包含amqp_bind、amqp_consumer、amqp_exchange_declare、amqp_listen、amqp_listenq、amqp_producer、amqp_rpc_sendstring_client、amqp_sendstring 和 amqp_unbind 可执行文件。
运行实例:
在一个terminal中,运行
另一个terminal中,运行
会在监听的terminal中出现如下打印:
Delivery 1, exchange amq.direct routingkey test
Content-type: text/plain
----
00000000: 68 65 6C 6C 6F 20 77 6F : 72 6C 64 hello world
rabbitmq-c是一个C语言操作的AMQP客户端库,用来与RabbitMQ broker进行交互
Building and installing:
需要:CMake2.6或以上版本
1、下载安装包后解压,进入主目录,
2、mkdir build && cd build
3、cmake ..
4、cmake --build .
完成后,build目录下会出现librabbitmq、examples 和 tests 子目录。其中librabbitmq中包含生成的librabbitmq.so等文件;examples中包含amqp_bind、amqp_consumer、amqp_exchange_declare、amqp_listen、amqp_listenq、amqp_producer、amqp_rpc_sendstring_client、amqp_sendstring 和 amqp_unbind 可执行文件。
运行实例:
在一个terminal中,运行
./examples/amqp_listen localhost 5672 amq.direct test
四个参数分别为域名、端口、exchange、bindingkey
另一个terminal中,运行
./examples/amqp_sendstring localhost 5672 amq.direct test "hello world"
五个参数分别为域名、端口、exchange、bindingkey 发送字符
会在监听的terminal中出现如下打印:
Delivery 1, exchange amq.direct routingkey test
Content-type: text/plain
----
00000000: 68 65 6C 6C 6F 20 77 6F : 72 6C 64 hello world
0000000B:
附上代码解析:
amqp_listen.c
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <amqp.h>
#include <amqp_tcp_socket.h>
#include <assert.h>
#include "utils.h"
int main(int argc, char const *const *argv) {
char const *hostname;
int port, status;
char const *exchange;
char const *bindingkey;
amqp_socket_t *socket = NULL;
amqp_connection_state_t conn;
amqp_bytes_t queuename;
if (argc < 5) {
fprintf(stderr, "Usage: amqp_listen host port exchange bindingkey\n");
return 1;
}
hostname = argv[1];
port = atoi(argv[2]);
exchange = argv[3];
bindingkey = argv[4];
/*分配并初始化一个新的amqp_connection_state_t对象,用该函数创建的
amqp_connection_state_t对象需要用amqp_destroy_connection()函数来释放*/
conn = amqp_new_connection();
/*创建一个新的TCP socket
需调用amqp_connection_close()释放socket资源*/
socket = amqp_tcp_socket_new(conn);
if (!socket)