My current situation:
I currently have a Mule ESB application with three flows which process messages originating from two different sources, these three flows are tied together using a VM queue.
Flow #1:
Inbound (Endpoint #1) -> (Perform message processing and transformations) -> Outbound (Endpoint #3)
Flow #2:
Inbound (Endpoint #2) -> (Perform message processing and transformations) -> Outbound (Endpoint #3)
Flow #3
Inbound (Endpoint #3) -> (Perform message processing and transformations, do stuff) -> Outbound
Problem/ Issue:
Now what I want to do is introduce a fourth flow, Flow #4, that gets state information from an inbound endpoint and based off this information be able to prevent Flow #3 from ever being executed/ prevent it from processing its inbound messages.
In other words, what I'd ideally like is to have Flow #4 run at the startup of the ESB application (like all flows seem to automatically do), and based on the state information it gets from its inbound message, prevent/ allow or enable/ disable Flow #3 from ever processing messages from Endpoint #3.
The following are what I ideally require:
Requirements:
What's the best way to accomplish what I want to do?
If there is no real good solution, then if I must omit #3 requirement, then what's the best way to accomplish such a global variable that is shared between two independent flows that aren't tied together by some outbound -> inbound endpoint in the XML config? I've tried using session properties, but they require that the flows be tied together as either subflows or by an endpoint.
Thanks.
Use a global property and a few MEL expressions to make this happen:
<global-property name="gate_open" value="true" />
<flow name="gated-flow">
<vm:inbound-endpoint path="gated.in" />
<expression-filter expression="#[app.registry.gate_open]" />
...
</flow>
<flow name="gate-controller">
<vm:inbound-endpoint path="gate.in" />
<expression-component>
app.registry.gate_open = false
</expression-component>
</flow>
Sending any message to vm://gate.in
will close the gate and gated-flow
will stop processing the messages it receives.
You can use any protocol you want instead of VM.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With