Я новичок в Spring Integration. У меня есть канал, подключенный к очереди JMS. Затем у меня есть определенный шлюз, в котором этот канал настроен как канал запроса по умолчанию.
Эта базовая конфигурация у меня работает безупречно. Определенный служебный интерфейс внедряется в мой компонент, и я могу отправить сообщение через этот интерфейс, и оно доходит до очереди.
Однако у меня есть дополнительное требование, чтобы была определена очередь переключения при отказе: если по какой-то причине первичный недоступен, будет предпринята попытка отправки в очередь переключения при отказе / вторичную очередь.
Я не нахожу примеров такой конфигурации.
Поскольку мои каналы подключены к очередям JMS, моей первой мыслью было создать еще одну фабрику соединений (указывающую на вторичный сервер JMS), создать еще один компонент очереди и канал, а затем иметь еще один шлюз, который будет использоваться, если исключение будет выбрано из первого вызов шлюза.
try {
primaryGateway.sendMessage(message);
} catch (Exception e) {
secondaryGateway.sendMessage(message);
}
Тем не менее, я начал задаваться вопросом, есть ли встроенный (скрытый) способ, позволяющий настроить весеннюю интеграцию для автоматического тестирования вторичной очереди, если отправка на первичную не удалась.
Кроме того, у меня возникла проблема при попытке определить вторичную фабрику соединений. Я не уверен, как указать компонентам очереди (или их каналам), какую фабрику соединений использовать. Если я не использовал идентификатор по умолчанию "connectionFactory", он жаловался.
Вот ключевые части моей конфигурации с одной определенной очередью / каналом / шлюзом:
<bean id="mqConnectionFactory" class="com.ibm.mq.jms.MQQueueConnectionFactory">
<property name="transportType" value="1"/>
<property name="hostName" value="${lsm.primary.sch.outbound.host}"/>
<property name="port" value="${lsm.primary.sch.outbound.port}"/>
<property name="queueManager" value="${lsm.primary.sch.outbound.manager}"/>
<property name="channel" value="${lsm.primary.sch.outbound.channel}"/>
</bean>
<bean id="connectionFactory"
class="org.springframework.jms.connection.UserCredentialsConnectionFactoryAdapter">
<property name="targetConnectionFactory" ref="mqConnectionFactory" />
<property name="username" value="blah" />
<property name="password" value="blah" />
</bean>
<bean id="lsmScheduleActualOutboundQueue" class="com.ibm.mq.jms.MQQueue">
<property name="baseQueueManagerName" value="${lsm.primary.sch.outbound.manager}"/>
<property name="baseQueueName" value="${lsm.primary.sch.outbound.queue}"/>
</bean>
<int:channel id="lsmScheduleActualOutboundChannel" />
<jms:outbound-channel-adapter id="jmsOutboundAdapter"
channel="lsmScheduleActualOutboundChannel"
destination="lsmScheduleActualOutboundQueue" />
<int:gateway id="lsmScheduleActualOutboundGateway"
service-interface="com.myapp.service.LSMScheduleActualsGateway"
default-request-channel="lsmScheduleActualOutboundChannel"
default-request-timeout="1000" />