Rabbitmq-c库:如何获取';方法';由经纪人退回

Rabbitmq-c库:如何获取';方法';由经纪人退回,c,rabbitmq,amqp,C,Rabbitmq,Amqp,我正在使用rabbitmq-c库连接到rabbitmq服务器(GNU/Linux构建环境) 当我使用“amqp\u channel\u open(…)”时,我从要调试的服务器收到一个错误 根据示例,我调用“amqp\u get\u rpc\u reply(…)”。它返回一个amqp\u rpc\u reply\t,我将其分配给变量“my\u reply” 我的回复。回复类型是AMQP\u RESPONSE\u SERVER\u异常,这就是为什么我认为这是来自服务器的错误 但是,对于amqp\u

我正在使用rabbitmq-c库连接到rabbitmq服务器(GNU/Linux构建环境)

当我使用“amqp\u channel\u open(…)”时,我从要调试的服务器收到一个错误

根据示例,我调用“amqp\u get\u rpc\u reply(…)”。它返回一个amqp\u rpc\u reply\t,我将其分配给变量“my\u reply”

我的回复。回复类型是AMQP\u RESPONSE\u SERVER\u异常,这就是为什么我认为这是来自服务器的错误

但是,对于amqp\u rpc\u reply\t类型

对于my_reply.reply:“如果出现AMQP_RESPONSE_SERVER_异常,此字段将设置为从代理返回的方法”

因此,在这种情况下,我的reply.reply是一种amqp\u方法。但是,当我查看amqp方法的文档时,它有两个字段:id(“方法id号”,?)和解码的

对于解码的,它是一个空白*: 指向已解码方法的指针,强制转换为要使用的适当类型

我被困在这一点上,因为我不知道将**解码*投给什么。它应该是某种数据结构,包含服务器返回的信息(AMQP方法),但是我找不到任何关于我应该将其转换为什么类型的引用


[为清晰起见进行了编辑]

我在示例中仔细研究了一下,发现了一些有用的东西

当my_reply.reply_type为AMQP_RESPONSE_SERVER_EXCEPTION时,字段my_reply.reply.id包含一个AMQP_uuxxxxxx\u方法常量,该常量由AMQP_framing.h中的宏定义

每个方法ID都有一个遵循相同命名约定的关联类型-例如,对于AMQP\u CONNECTION\u CLOSE\u method(我得到的)有AMQP\u CONNECTION\u CLOSE\t

知道将哪种类型转换为my_reply.reply.decoded,很容易提取有用的信息,例如(从示例中,假设my_reply.reply.id为AMQP_CONNECTION_CLOSE_METHOD):

amqp_connection_close_t *m = (amqp_connection_close_t *)my_reply.reply.decoded;
printf( "Server connection error %d, message: %.*s\n",
               m->reply_code,
         (int) m->reply_text.len,
      (char *) m->reply_text.bytes);