出于调试目的转储 apache thrift 消息?
Dump apache thrift messages for debugging purposes?
Apache Thrift 是开源 RPC 框架中更受欢迎的选择之一(gRPC 也是自公开发布以来获得大量关注的框架)。
在我的 c++ Im using a TMultiplexedProcessor
设置中。我想这可能是任何 TProcessor
因为我只是对打印发送的任何内容感兴趣。
这有一个方法叫做:
bool process(std::shared_ptr<protocol::TProtocol> in,
std::shared_ptr<protocol::TProtocol> out,
void* connectionContext) override {
我的想法是再次重写它,这样我就可以打印 in
参数 - 但我怎样才能将 TProtocol
写入输出? (乍一看,序列化成字符串好像不太直接)
我感觉可能还有其他或更简单的方法。所以我的问题是如何转储通过节俭收到的所有消息(用于调试目的)?
有 TProtocolTap
和 TDebugProtocol
。
用法示例可以在thrift_dump.cpp
:
中找到
shared_ptr<TProtocol> iprot(new TBinaryProtocol(itrans));
shared_ptr<TProtocol> oprot(
new TDebugProtocol(
shared_ptr<TTransport>(new TBufferedTransport(
shared_ptr<TTransport>(new TFDTransport(STDOUT_FILENO))))));
TProtocolTap tap(iprot, oprot);
std::string name;
TMessageType messageType;
int32_t seqid;
for (;;) {
tap.readMessageBegin(name, messageType, seqid);
tap.skip(T_STRUCT);
tap.readMessageEnd();
}
Apache Thrift 是开源 RPC 框架中更受欢迎的选择之一(gRPC 也是自公开发布以来获得大量关注的框架)。
在我的 c++ Im using a TMultiplexedProcessor
设置中。我想这可能是任何 TProcessor
因为我只是对打印发送的任何内容感兴趣。
这有一个方法叫做:
bool process(std::shared_ptr<protocol::TProtocol> in,
std::shared_ptr<protocol::TProtocol> out,
void* connectionContext) override {
我的想法是再次重写它,这样我就可以打印 in
参数 - 但我怎样才能将 TProtocol
写入输出? (乍一看,序列化成字符串好像不太直接)
我感觉可能还有其他或更简单的方法。所以我的问题是如何转储通过节俭收到的所有消息(用于调试目的)?
有 TProtocolTap
和 TDebugProtocol
。
用法示例可以在thrift_dump.cpp
:
shared_ptr<TProtocol> iprot(new TBinaryProtocol(itrans));
shared_ptr<TProtocol> oprot(
new TDebugProtocol(
shared_ptr<TTransport>(new TBufferedTransport(
shared_ptr<TTransport>(new TFDTransport(STDOUT_FILENO))))));
TProtocolTap tap(iprot, oprot);
std::string name;
TMessageType messageType;
int32_t seqid;
for (;;) {
tap.readMessageBegin(name, messageType, seqid);
tap.skip(T_STRUCT);
tap.readMessageEnd();
}