В настоящее время у меня есть демон, прослушивающий пакеты TCP / UDP на порту X с помощью системного вызова recvfrom
:
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);
Я бы хотел заменить системный вызов msgsnd
на RabbitMQ и отправить сообщения по протоколу 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);
}
Полезные данные отправлены и получены успешно, но некоторые данные потеряны. Когда я получаю сообщение из очереди, полезная нагрузка не такая, как при использовании системного вызова для отправки / получения сообщений. Я уверен, что это связано с типами данных, которые я использую, но пока не могу понять.