0

I have a couple of pretty simple routes and I need to define onCompletion behavior. Besides that I need to use route properties, where I store some required values - e.g.

<routeProperty key="NTX_COMP_ID" value="COMP_2" /> 

To get routeProperty values in onCompletion processor I have to get Route object:

String routeId = exchange.getFromRouteId();
Route route = exchange.getContext().getRoute(routeId);

My routes diagram is the following: enter image description here So the problem is that I can not get correct route in onCompletion for Route 1 on the diagram above - I am getting Route 2 instead. I understand that the reason is seda - async way, cz direct does not show such kind of problem. So - is there any way of getting correct Route in this situation? My code:

<route id="component-1">
                    <from uri="timer:sample?period=15s"/>  
                    <onCompletion mode="BeforeConsumer" parallelProcessing="false">
                        <setHeader name="NTX_CURRENT_COMPONENT">
                            <constant>component-1</constant>
                        </setHeader>
                        <!-- so this is a kinda like an after completion callback -->
                        <log message="${headers}"/>
                        <process ref="onCompletionHandler" />
                        <log message="${headers}"/>
                    </onCompletion>
                    <setBody>
                        <simple>Hello Entaxy! Component 1</simple>
                    </setBody>
                    <log message="${body}"/>
                    <!-- <to uri="direct-vm:toStep2"/>  -->
                    <log message="${exchangeId}"/>
                    <to uri="direct-vm:toStep2"/>
                    <log message="${exchangeId}"/>
                    <log message="After step 2"/>
                    <to uri="direct-vm:toComp1-1"/>
                    <routeProperty key="NTX_COMP_ID" value="COMP_1" />
                </route>
                <route id="component-1-1">
                    <from uri="direct-vm:toComp1-1"/>
                    <onCompletion mode="BeforeConsumer" parallelProcessing="false">
                        <setHeader name="NTX_CURRENT_COMPONENT">
                            <constant>component-1</constant>
                        </setHeader>
                        <!-- so this is a kinda like an after completion callback -->
                        <log message="${headers}"/>
                        <process ref="onCompletionHandler" />
                        <log message="${headers}"/>
                    </onCompletion>
                    <log message="In comp 1-1"/>
                    <routeProperty key="NTX_COMP_ID" value="COMP_1" />
                </route>
                
                
                <route id="component-2">
                    <!-- <from uri="direct-vm:toStep2"/>  -->
                    <from uri="direct-vm:toStep2"/>
                    <onCompletion mode="BeforeConsumer" parallelProcessing="false">
                        <setHeader name="NTX_CURRENT_COMPONENT">
                            <constant>component-2</constant>
                        </setHeader>
                        <!-- so this is a kinda like an after completion callback -->
                        <log message="${headers}"/>
                        <process ref="onCompletionHandler" />
                        <log message="${headers}"/>
                    </onCompletion>
                    <setBody>
                        <simple>Hello Entaxy! Component 2</simple>
                    </setBody>
                    <delay>
                        <constant>5000</constant>
                    </delay>
                    <log message="${body}"/>
                    <stop/>
                    <routeProperty key="NTX_COMP_ID" value="COMP_2" />
                </route>

I have checked behavior with seda and direct, seda results in possibly wrong behavior.

andreessen
  • 11
  • 1

0 Answers0