将标头添加到rabbitmq c客户端

时间:2014-05-09 20:49:30

标签: c client rabbitmq

我使用librabbitmq C库来处理AMQP投诉代理(在我的情况下是RabbitMQ),我尝试将标头添加到c客户端,用于rabbitmq。

我修改了amqp_sendstring.c

amqp_basic_properties_t props;
    props._flags = AMQP_BASIC_CONTENT_TYPE_FLAG | AMQP_BASIC_DELIVERY_MODE_FLAG |  AMQP_BASIC_HEADERS_FLAG;
    props.content_type = amqp_cstring_bytes("text/plain");
    props.delivery_mode = 2; /* persistent delivery mode */
    amqp_table_t *table=&props.headers;
    props.headers.num_entries=2;
    props.headers.entries=calloc(props.headers.num_entries, sizeof(amqp_table_entry_t));
    strcpy(&(table->entries[0]).key,"id1");
    ((table->entries[0]).value).kind=AMQP_FIELD_KIND_I32;
    ((table->entries[0]).value).value.i32=1234;
    strcpy(&(table->entries[1]).key,"id2");
    (table->entries[1]).value.kind=AMQP_FIELD_KIND_I32;
    (table->entries[1]).value.value.i32=5678;
    die_on_error(amqp_basic_publish(conn,
                                    1,
                                    amqp_cstring_bytes(exchange),
                                    amqp_cstring_bytes(routingkey),
                                    0,
                                    0,
                                    &props,

并在amqp_listen.c中:

  132       printf("Num headers received %d \n", envelope.message.properties.headers.num_entries);

然而,听众似乎没有收到任何标题。有什么机构有什么建议吗?其他示例代码?

1 个答案:

答案 0 :(得分:2)

.key的{​​{1}}成员是amqp_table_entry_t而不是amqp_bytes_t,因此您应该使用char*来设置amqp_cstring_bytes()而不是strcpy()