Используя 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 секунды.Важно отметить, что при истечении времени ожидания соединение не прерывается.Поэтому возможно повторно отправить сообщение (и), на которое влияют, позже, используя то же соединение, как только становится доступным брокер.