amqp 上的 C 二进制消息
C binary message over amqp
目前我有一个守护进程使用 recvfrom
系统调用监听端口 X 上的 TCP/UDP 数据包:
ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,
struct sockaddr *src_addr, socklen_t *addrlen);
然后使用 msgsnd
系统调用通过消息队列发送数据:
int msgsnd(int msqid, struct msgbuf *msgp, int msgsz, int msgflg);
我想用 RabbitMQ 替换 msgsnd
系统调用并使用 amqp
协议发送消息。我面临的问题是通过 RabbitMQ 接收和发送的数据格式。当我在端口上收到数据时,我会尝试像这样发送它:
ssize_t recvfrom(
sockfd, msgbufInst.msgContent, len, flags, src_addr, addrlen
);
send_over_rabbitmq(msgbufInst.msgContent);
其中 send_over_rabbitmq 差不多
send_over_rabbitmq(char *rawData){
amqp_bytes_t payload;
payload.len = sizeof(rawData);
payload.bytes = rawData;
int result = amqp_basic_publish((*channel)->conn, 1,
amqp_cstring_bytes("myExchange"),
amqp_cstring_bytes(""), 0, 0, NULL, payload);
}
有效负载发送和接收成功但部分数据丢失。当我使用队列中的消息时,有效负载与我使用系统调用 send/consume 消息时不同。我确信它与我正在使用的数据类型有关,但我还不能弄明白。
正如我在 中指出的那样:
在send_over_rabbitmq()
函数中,sizeof(rawData)
的值可能是8,也可能只有4——它是指针变量的大小,而不是它指向的数据的长度.那可能不是你想要的。
您需要向 send_over_rabbitmq()
函数发送更多信息——最明显的是从 recvfrom()
接收到的数据的长度。这意味着捕获信息——无论如何,在尝试通过 RabbitMQ 中继信息之前,您应该检查 recvfrom()
中的 return 值。
目前我有一个守护进程使用 recvfrom
系统调用监听端口 X 上的 TCP/UDP 数据包:
ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,
struct sockaddr *src_addr, socklen_t *addrlen);
然后使用 msgsnd
系统调用通过消息队列发送数据:
int msgsnd(int msqid, struct msgbuf *msgp, int msgsz, int msgflg);
我想用 RabbitMQ 替换 msgsnd
系统调用并使用 amqp
协议发送消息。我面临的问题是通过 RabbitMQ 接收和发送的数据格式。当我在端口上收到数据时,我会尝试像这样发送它:
ssize_t recvfrom(
sockfd, msgbufInst.msgContent, len, flags, src_addr, addrlen
);
send_over_rabbitmq(msgbufInst.msgContent);
其中 send_over_rabbitmq 差不多
send_over_rabbitmq(char *rawData){
amqp_bytes_t payload;
payload.len = sizeof(rawData);
payload.bytes = rawData;
int result = amqp_basic_publish((*channel)->conn, 1,
amqp_cstring_bytes("myExchange"),
amqp_cstring_bytes(""), 0, 0, NULL, payload);
}
有效负载发送和接收成功但部分数据丢失。当我使用队列中的消息时,有效负载与我使用系统调用 send/consume 消息时不同。我确信它与我正在使用的数据类型有关,但我还不能弄明白。
正如我在
在send_over_rabbitmq()
函数中,sizeof(rawData)
的值可能是8,也可能只有4——它是指针变量的大小,而不是它指向的数据的长度.那可能不是你想要的。
您需要向 send_over_rabbitmq()
函数发送更多信息——最明显的是从 recvfrom()
接收到的数据的长度。这意味着捕获信息——无论如何,在尝试通过 RabbitMQ 中继信息之前,您应该检查 recvfrom()
中的 return 值。