Совместное использование JMS deadLetterChannel по прямому маршруту с транзакцией в Apache Camel - PullRequest
0 голосов
/ 25 июня 2019

У меня есть маршрут Camel, который считывает сообщение из очереди JMS jboss, отправляет на прямой маршрут буксировки, где один прямой маршрут успешно обрабатывает сообщение и отправляет в другую очередь JMS, другой прямой маршрут не смог обработать сообщение.

Я ожидаю, что исходный обмен перемещен в канал мертвых писем, и первый прямой маршрут не должен фиксировать отправку сообщения в очередь JMS с использованием отката.

Я перепробовал множество вариантов, но пока ничего не получилось.Ниже я предоставил верблюжий маршрут.Пожалуйста, помогите мне.

 <bean id="jmsConnectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean">
        <property name="jndiTemplate" ref="jndiTemplate"/>
        <property name="jndiName" value="jms/RemoteConnectionFactory"/>
    </bean>

    <bean id="jmsTransactionManager" class="org.springframework.jms.connection.JmsTransactionManager">
        <property name="connectionFactory" ref="jmsConnectionFactory"/>
    </bean>

    <bean id="jmsConfig" class="org.apache.camel.component.jms.JmsConfiguration">
        <property name="connectionFactory" ref="jmsConnectionFactory"/>
    </bean>

    <bean id="jmsConfigTx" class="org.apache.camel.component.jms.JmsConfiguration">
        <property name="connectionFactory" ref="jmsConnectionFactory"/>
        <property name="transactionManager" ref="jmsTransactionManager"/>
        <property name="transacted" value="true"/>
    </bean>

    <bean id="jms" class="org.apache.camel.component.jms.JmsComponent">
        <property name="configuration" ref="jmsConfig"/>
    </bean>

    <bean id="jmstx" class="org.apache.camel.component.jms.JmsComponent">
        <property name="configuration" ref="jmsConfigTx"/>
    </bean>

    <bean id="successProcessor" class="com.test.SuccessTestProcessor"/>
    <bean id="errorProcessor" class="com.test.ErrorTestProcessor"/>
    <bean id="deadChannelProcessor" class="com.test.DeadChannelTestProcessor"/>

    <bean id="myDeadLetterErrorHandler" class="org.apache.camel.builder.DeadLetterChannelBuilder">
        <property name="deadLetterUri" value="direct:error_channel"/>
    </bean>

    <camelContext xmlns="http://camel.apache.org/schema/spring">
        <route id="route-one" errorHandlerRef="myDeadLetterErrorHandler">
            <from uri="jmstx:queue:JMS_IN"/>
            <transacted/>
            <to uri="direct:success-route"/>
            <to uri="direct:error-route"/>
        </route>

        <route id="direct-success-route">
            <from uri="direct:success-route"/>
            <process ref="successProcessor"/>
            <to uri="jmstx:queue:JMS_OUT_1"/>
        </route>

        <route id="direct-error-route">
            <from uri="direct:error-route"/>
            <process ref="errorProcessor"/>
            <to uri="jmstx:queue:JMS_OUT_2"/>
        </route>

        <route id="direct_error_channel">
            <from uri="direct:error_channel"/>
            <process ref="deadChannelProcessor"/>
            <to uri="jmstx:queue:ERROR"/>
        </route>
    </camelContext>

1 Ответ

1 голос
/ 25 июня 2019
<-- error -->

<bean id="jmsConfigTx" class="org.apache.camel.component.jms.JmsConfiguration">
    <property name="connectionFactory" ref="jmsConnectionFactory"/>
    <property name="transactionManager" ref="jmsTransactionManager"/>
    <property name="transacted" value="true"/>
</bean>

in the above code snippet  already Transactionfactory refers to the jmsConnectionFactory internally , is there any need to write one more property to refer jmsConnectionFactory .
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...