ActiveMQ NMS: использование transport.requesttimeout с отказоустойчивым транспортом - PullRequest
1 голос
/ 10 апреля 2011

Чтобы попытаться смягчить любые зависания, которые могут возникнуть во время проблем с подключением ActiveMQ в моем приложении, я смотрю на добавление следующего параметра в строку подключения моего брокера в моем приложении:

?transport.requesttimeout=10000

Согласно этот ресурс , это выглядит так, как будто это поможет справиться с этими инцидентами.

Однако я не могу заставить это работать с моей текущей строкой соединения для аварийного переключения, которая выглядит следующим образом:

failover:(tcp://masterbroker:61616,tcp://slavebroker:61616)?keepAlive=true

Добавление его таким образом:

failover:(tcp://masterbroker:61616,tcp://slavebroker:61616)?keepAlive=true&transport.requesttimeout=10000

Или, в качестве альтернативы, вот так:

failover:(tcp://masterbroker:61616?transport.requesttimeout=10000,tcp://slavebroker:61616?transport.requesttimeout=10000)?keepAlive=true

... оба, похоже, вызывают исключения или сбои NMS дляconnect.

Это может показаться довольно тривиальным вопросом, но как я могу указать специфические для транспорта директивы в этом типе строки соединения?

Ответы [ 2 ]

1 голос
/ 10 апреля 2011

Вы всегда должны добавлять, какую версию NMS.ActiveMQ вы используете, когда задаете эти вопросы, поскольку поведение между версиями камеры различается.Предполагая, что вы используете последнюю версию, я бы ожидал исключение NMSException от первой формы, если вы пытались подключиться к брокеру, и он не работал примерно через 10 секунд, поскольку это то, о чем говорит URI, второйURI недействителен, поскольку единственные параметры, которые применимы к внутренним URI конфигурации аварийного переключения, - это параметры для вызываемого типа транспорта, в данном случае TCP.

Возможно, было бы лучше сделать шаг назад и объяснить, что вы пытаетесь выполнить, поскольку я не знаю, по какой причине вы применяете опцию тайм-аута запроса.В большинстве случаев я бы не рекомендовал этот вариант.

Также опция keepAlive здесь никак не повлияет, поскольку она не применяется к транспортам tcp, поэтому ее просто игнорируют.Помимо того, что поддержка tcp-сокета остается в живых, практически бесполезна, так как она срабатывает только раз в два часа или около того, транспорты tcp будут делать свое собственное сердцебиение для вас, если вы не отключите монитор неактивности, поэтому им не нужно keepAlive = true.1006 * Если вы можете предоставить больше информации о том, какие исключения вы видите или какую проблему вы пытаетесь решить с помощью тайм-аута запроса, я, вероятно, мог бы ответить на ваш вопрос лучше.

-Tim www.fusesource.com

0 голосов
/ 29 октября 2018

Вместо transport.requesttimeout=10000 используйте connection.RequestTimeout=10000

...