Я не пробовал это, но кажется, что вы можете использовать локальное переключение при сбое, чтобы уменьшить сопротивление:
С ActiveMQ вы можете настроить отказоустойчивый транспорт:
failover:(tcp://primary:61616,tcp://secondary:61616)?randomize=false
Чтобы попытаться нарисовать это:
client +---> primary: network broker <-------+
| |
+---> secondary: embedded broker -----+
Здесь первичным будет ваш сетевой брокер, а вторичным - локально встроенный брокер с мостом к первичному брокеру. Кажется, что это будет хорошо работать, когда клиент публикует allot; Я не уверен, будет ли это лучше для подписчиков, чем решение, предложенное @Biju: показано ниже:
client +---> secondary: embedded broker ------> primary: network broker
Например, вот мой встроенный брокер (который обычно непостоянен).
<bean id="activeMQBroker" class="org.apache.activemq.broker.BrokerService">
<property name="transportConnectors">
<list>
<bean id="brokerConnection" class="org.apache.activemq.broker.TransportConnector">
<property name="connectUri">
<bean id="brokerURI" class="java.net.URI">
<constructor-arg value="tcp://localhost:61616" />
</bean>
</property>
</bean>
</list>
</property>
<property name="persistent" value="true" />
</bean>