我之前在一些项目中使用过activemqcpp API,但我总是事先知道消息的类型,因此动态转换为相应的消息子类是安全的。
现在我正在构建MQ库的包装器,并且找不到从基本消息指针(由接收器返回)识别它匹配的消息子类以相应地转换它的方法。
答案 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。