Я сузил область проблемы, с которой я сталкиваюсь, и оказалось, что MessageProducer.send()
слишком медленно, когда он создан для конкретный тема "replyfeserver"
:
auto producer = context.CreateProducerFromTopic("replyfeserver");
producer->send(textMessage); //it is slow
Здесь призыв к send()
время от времени блокируется до 55-65 секунд — почти каждый раз после 4-5 звонков и в целом до 5-15 секунд.
Однако, если я использую какую-то другую тему, скажем, "feserver.action.status"
,
auto producer = context.CreateProducerFromTopic("feserver.action.status");
producer->send(textMessage); //it is fast!
Теперь вызов send()
возвращается немедленно, в течение доли секунды. я пробовал send()
с несколькими другими темами, и все они работают достаточно быстро.
Какие могут быть возможные проблемы с этой конкретной темой "replyfeserver"
? На что мне следует обратить внимание, чтобы диагностировать проблему? Я использовал эту тему в течение последних 2 месяцев.
Я использую XMS C ++ API и, пожалуйста, предположите, что context
объект — это абстракция, которая создает сеанс, пункт назначения, потребителя, производителя и так далее.
Я также хотел бы знать, есть ли разница между этими двумя подходами:
xms::Destination dest("topic://replyfeserver");
против
xms::Destination dest = session.createTopic("replyfeserver");
Я попробовал с обоими, это не имеет никакого значения — по крайней мере, я этого не заметил.
Там не должно быть никакой разницы. Лично мне нравится, чтобы мои темы были в иерархии. то есть A.B.C
Я запустил бы трассировку MQ, затем открыл бы PMR в IBM, дал бы им трассировку и сказал, пожалуйста, объясните задержку.
Других решений пока нет …