我在Ubuntu上运行ActiveMQ 5.5.0代理,下载并编译了APR 1.4.5和C API相关的libactivmq和libopenwire。
示例中提供的测试 c 位于: http://svn.apache.org/repos/asf/activemq/sandbox/openwire-c/src/examples/
不起作用,问题出在 WireFormat 魔术代码上,请参阅日志中的调试行:
2011-07-07 15:35:30,324 |调试|发送:WireFormatInfo { version = 7,properties = {CacheSize = 1024,CacheEnabled = true,SizePrefixDisabled = false,MaxInactivityDurationInitalDelay = 10000,TcpNoDelayEnabled = true,MaxInactivityDuration = 30000,TightEncodingEnabled = true,StackTraceEnabled = true},magic = [A,c ,t,i,v,e,M,Q]} | org.apache.activemq.transport.WireFormatNegotiator | org.apache.activemq.transport.WireFormatNegotiator ActiveMQ 任务 2 2011-07-07 15:35:30,327 |调试|使用本地最小值:WireFormatInfo { version=7,properties={CacheSize=1024,CacheEnabled=true,SizePrefixDisabled=false,MaxInactivityDurationInitalDelay=10000,TcpNoDelayEnabled=true,MaxInactivityDuration=30000,TightEncodingEnabled=true,StackTraceEnabled=true},magic=[ A,c,t,i,v,e,M,Q]} 和远程: WireFormatInfo { version=1297154048,properties={}, magic=[^A,^@,A,c,t,i,v, e]} | org.apache.activemq.transport.InactivityMonitor | org.apache.activemq.transport.InactivityMonitor | ActiveMQ 传输:tcp:///127.0.0.1:51606 2011-07-07 15:35:30,327 |调试|收到 WireFormat:WireFormatInfo { version=1297154048,properties={},magic=[^A,^@,A,c,t,i,v,e]} | org.apache.activemq.transport.WireFormatNegotiator | org.apache.activemq.transport.WireFormatNegotiator ActiveMQ 传输:tcp:///127.0.0.1:51606 2011-07-07 15:35:30,333 |调试| tcp:///127.0.0.1:51606 协商前:OpenWireFormat{version=7,cacheEnabled=false,stackTraceEnabled=false,tightEncodingEnabled=false,sizePrefixDisabled=false} | org.apache.activemq.transport.WireFormatNegotiator | org.apache.activemq.transport.WireFormatNegotiator ActiveMQ 传输:tcp:///127.0.0.1:51606 2011-07-07 15:35:30,337 |调试|传输失败:java.io.IOException:远程有线格式魔法无效 | org.apache.activemq.broker.TransportConnection.Transport | org.apache.activemq.broker.TransportConnection.Transport | ActiveMQ 传输:tcp:///127.0.0.1:51606
我调试了客户端并捕获了发送到代理的值,15个字节,我将在下面列出它们: 1:'\001' 2:'\001' 3: '\000' 4:“A” 5:“c” 6:“t” 7:“我” 8:“v” 9:“e” 10:'M' 11:“问” 12:'\000' 13:'\000' 14:'\000' 15:'\002' 这里最后四个字节是版本,设置为2
不知何故,此消息被经纪人转移/误解,因此魔术 token 和版本是错误的。
还有一条信息:我使用提供的版本 ow_commands_v1.[ch] 和 ow_commands_v2.[ch] 编译了 libopenwire,因此我尝试将测试与这两个版本链接起来,结果与任一版本相同。有谁知道两个版本的原因吗?我应该使用哪一个?
注意:此消息几天前已在 apache 论坛上发布,但没有回复。我希望这个网站上的消息能获得更多的流量。
最佳答案
OpenWire C API 没有由任何人维护,因此它被破坏也就不足为奇了。 ActiveMQ svn 存储库中有一个用于 ActiveMQ-CPP 的 C 包装器,如果您真的愿意使用 C,您可以尝试使用它。
关于c - ActiveMQ OpenWire C API问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6656599/