Więc poniżej mam Camel (przez DSL) Wiosna powodzeniem integrujący moje fasoli z kolejek ActiveMQ:Wymuś przekroczenie limitu czasu na ActiveMQ z trasy Camel?
<!-- Note: this code is just a snippet; if you need to see more, please let me know! -->
<camelContext id="my-camel-context" xmlns="http://camel.apache.org/schema/spring">
<route>
<from uri="activemq-myinstance:queue:myqueue" />
<onException>
<exception>java.lang.Exception</exception>
<redeliveryPolicy maximumRedeliveries="2" />
<to uri="activemq-myinstance:queue_failures" />
</onException>
<to uri="bean:myBean?method=doCommand" />
</route>
</camelContext>
<bean id="jmsConnectionFactory-myqueue" class="org.apache.activemq.ActiveMQConnectionFactory">
<property name="brokerURL" value="${activemq.instance.url}" />
</bean>
<bean id="pooledConnectionFactory-myqueue" class="org.apache.activemq.pool.PooledConnectionFactory">
<property name="maxConnections" value="64" />
<property name="maximumActive" value="${max.active.consumers}" />
<property name="connectionFactory" ref="jmsConnectionFactory-myqueue" />
</bean>
<bean id="jmsConfig-myqueue" class="org.apache.camel.component.jms.JmsConfiguration">
<property name="connectionFactory" ref="pooledConnectionFactory-myqueue"/>
<property name="concurrentConsumers" value="${max.active.consumers}"/>
</bean>
<bean id="activemq-myqueue" class="org.apache.activemq.camel.component.ActiveMQComponent">
<property name="configuration" ref="jmsConfig-myqueue"/>
</bean>
Chciałbym wyraźnie egzekwować timeout gniazdo (na Socket.read()
) - pomiędzy Camel i ActiveMQ - od 25 sekund. Tak więc, kiedy Camel próbuje przekierować wiadomość do/z ActiveMQ, jeśli ActiveMQ potrzebuje więcej niż 25 sekund, aby ukończyć tę odpowiedź, chcę, aby wątek został zakończony z wdziękiem. Oczywiście, jeśli możliwe jest również skonfigurowanie pewnego rodzaju przełączania awaryjnego (tak, aby żądania, które limit czasu może zostać odtworzony w przyszłości), jest znacznie bardziej korzystne niż tylko utrata wiadomości!
Jak mogę to zrobić? Z góry dziękuję!
Aktualizacja: jeśli Camel/JMS/ActiveMQ nie obsługuje tego po wyjęciu z pudełka, nie przeszkadza mi pisać własne „ThreadManager
”, który przerywa/zatrzymuje wątki po 25-sekund, ale nie jestem upewnij się, jaki interfejs/klasy implementować/rozszerzać, a następnie połączyć się z moimi komponentami Spring.
Może gdyby Ustawiłem 'expiryTimeout' na moim' PooledConnectionFactory'? – IAmYourFaja