ActiveMQ CPP - 识别消息类型

时间:2014-03-05 14:49:32

标签: c++ activemq-cpp

我之前在一些项目中使用过activemqcpp API,但我总是事先知道消息的类型,因此动态转换为相应的消息子类是安全的。

现在我正在构建MQ库的包装器,并且找不到从基本消息指针(由接收器返回)识别它匹配的消息子类以相应地转换它的方法。

1 个答案:

答案 0 :(得分:1)

如果你想用纯C ++方式做事,那么你可以使用C ++ RTTI中的typeid运算符来检查对象以查看它是什么。

更简单的方法是转换为所有CMS Message实例派生自的基础消息类型:

activemq::core::commands::Message

此类提供方法getDataStructureType()方法,通过OpenWire协议中使用的指定ID返回类型:

    const unsigned char ID_ACTIVEMQBLOBMESSAGE = 29;
    const unsigned char ID_ACTIVEMQBYTESMESSAGE = 24;
    const unsigned char ID_ACTIVEMQMAPMESSAGE = 25;
    const unsigned char ID_ACTIVEMQMESSAGE = 23;
    const unsigned char ID_ACTIVEMQOBJECTMESSAGE = 26;
    const unsigned char ID_ACTIVEMQSTREAMMESSAGE = 27;
    const unsigned char ID_ACTIVEMQTEXTMESSAGE = 28;

或者您可以尝试对每种类型进行动态转换,直到结果为非null。