Я запускаю брокер ActiveMQ 5.5.0 в Ubuntu, скачал и скомпилировал 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 {версия = 7, свойства = {CacheSize = 1024, CacheEnabled = истина, SizePrefixDisabled = ложь, MaxInactivityDurationInitalDelay = 10000, TcpNoDelayEnabled = истина, MaxInactivityDuration = 30000, TightEncodingEnckText = true, magic_Edable = = , t, i, v, e, M, Q]} | org.apache.activemq.transport.WireFormatNegotiator | ActiveMQ Task-2
2011-07-07 15: 35: 30,327 | ОТЛАДКА | Использование min of local: WireFormatInfo {version = 7, properties = {CacheSize = 1024, CacheEnabled = true, SizePrefixDisabled = false, MaxInactivityDurationInitalDelay = 10000, TcpNoDelayEnabled = true, MaxInactivityDuration = 30000, TightEncableEck A, c, t, i, v, e, M, Q]} и удаленный: WireFormatInfo {version = 1297154048, properties = {}, magic = [^ A, ^ @, A, c, t, i, v, е]} | org.apache.activemq.transport.InactivityMonitor | ActiveMQ Transport: tcp: ///127.0.0.1: 51606
2011-07-07 15: 35: 30,327 | ОТЛАДКА | Получено WireFormat: WireFormatInfo {версия = 1297154048, свойства = {}, магия = [^ A, ^ @, A, c, t, i, v, e]} | org.apache.activemq.transport.WireFormatNegotiator | ActiveMQ Transport: 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 ,ightEncodingEnabled = false, sizePrefixDisabled = false} | org.apache.activemq.transport.WireFormatNegotiator | ActiveMQ Transport: tcp: ///127.0.0.1: 51606
2011-07-07 15: 35: 30,337 | ОТЛАДКА | Транспортный сбой: java.io.IOException: дистанционное волшебство формата проводника недопустимо | org.apache.activemq.broker.TransportConnection.Transport | ActiveMQ Transport: tcp: ///127.0.0.1: 51606
Я отладил клиентскую часть и захватил значения, отправленные посреднику, 15 байт, я перечислю их ниже:
1: '\ 001'
2: '\ 001'
3: «\ 000»
4: «А»
5: с
6: 'т'
7: «я»
8: 'v'
9: «е»
10: 'M'
11: 'Q'
12: '\ 000'
13: '\ 000'
14: '\ 000'
15: '\ 002'
здесь последние четыре байта - версия, которая установлена в 2
Каким-то образом это сообщение смещено / неверно истолковано брокером, поэтому магический токен и версия неверны.
Еще одна информация: я скомпилировал libopenwire, используя обе предоставленные версии ow_commands_v1. [Ch] и ow_commands_v2. [Ch], поэтому я попытался связать тест с обеими, результат одинаков с любой версией. Кто-нибудь знает причину двух версий? какой я должен использовать?
Примечание: это сообщение было опубликовано несколько дней назад на форуме apache, но ответа нет. Надеюсь на этом сайте сообщение получит больше трафика.