Rabbitmq-c库:如何获取';方法';由经纪人退回
我正在使用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方法),但是我找不到任何关于我应该将其转换为什么类型的引用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
[为清晰起见进行了编辑]我在示例中仔细研究了一下,发现了一些有用的东西 当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);