WSO2 ESB как производитель JMS с тайм-аутом переноса при сбое - PullRequest
0 голосов
/ 01 июня 2018

Используя wso2 esb 4.9.0, я бы хотел, чтобы HTTP-API передавал сообщения в очередь JMS (activemq).Отправка jms должна использовать аварийное переключение, но если ни один из посредников activemq не доступен, он должен выполнить последовательность ошибок после тайм-аута (например, 15 секунд) (В последовательности ошибок ответ http должен быть отправлен исходному клиенту с ошибкой httpкод 500 и тело JSON)

Я попытался использовать следующий URL для моей фабрики соединений activemq:

<parameter name="java.naming.provider.url" locked="false">failover:(tcp://localhost:61616)?timeout=3000</parameter>

Я также попытался установить параметр тайм-аута в URI в моем файле api.xml (пропуская другие параметры):

<send>
    <endpoint>
        <address uri="jms:/MyQueue?java.naming.provider.url=failover:(tcp://localhost:616161)?timeout=3000"/>
    </endpoint>
</send>

Мой API все еще блокируется на неопределенный срок, когда я убиваю всех своих брокеров activemq:

curl -XPOST -H "Content-Type: application/json" -d '{}' -k "https://localhost:8243/myApi/send"
^C # I have to kill it manually; instead it should return an error

Как мне реализовать это с помощью wso2 esb?

См. Ссылку на транспортный резервный сервер activemq для документации по параметру тайм-аута: http://activemq.apache.org/failover-transport-reference.html

Примечания

В операциях отправки транспорта при отказоустойчивости транспорт по умолчанию блокируется на неопределенный срок, когда посредникстановится недоступным.Есть два варианта для обработки этого сценария.Во-первых, либо установите TransportListener непосредственно в ActiveMQConnectionFactory, чтобы он был на месте перед любым запросом, который может потребовать сетевой скачок или секунду, установите параметр тайм-аута.Параметр timeout вызывает сбой текущей операции отправки после указанного времени ожидания.

Пример:

failover: (tcp: // primary: 61616)? Timeout = 3000

В этом примере, если соединение не установлено, операция отправки завершится через 3 секунды.Важно отметить, что при истечении времени ожидания соединение не прерывается.Поэтому возможно повторно отправить сообщение (и), на которое влияют, позже, используя то же соединение, как только становится доступным брокер.

Ответы [ 2 ]

0 голосов
/ 14 июня 2018

В моем случае это было создание соединения, поэтому настройка startupMaxReconnectAttempts = X позволила мне «истечь» после нескольких попыток переподключения.При настройках по умолчанию (экспоненциальный откат) значение X = 10 тайм-аутов через 5 секунд.Поэтому я использовал

<address uri="jms:/MyQueue?java.naming.provider.url=failover:(tcp://localhost:616161)?startupMaxReconnectAttempts=10"/>
0 голосов
/ 05 июня 2018

Попробуйте использовать <property name="ClientApiNonBlocking" action="remove" scope="axis2"/> перед отправкой посредника.

...