If all the outbound properties are converted to inbound properties on crossing the transport barrier , and all the outbound properties set are available at the mule endpoint as inbound properties , why do we need session variable ?
You are right about the concept of outbound properties,but you need to consider following scenarios
The outbound properties(which can later become inbound properties)
are visible only during execution of single flow i.e. they cannot be
used across multiple flows.
when message is passed to a new flow via a flow-ref rather than a
connector, the outbound properties remain outbound properties and are
not converted to inbound property.
on the other hand for session variables
They are available across all flows within a application.
so there is a specific purpose for which mule has both outbound properties and session variables.
You can use any one of those which cater to your specific requirements.
For further reference you can have a look here Mule Message
hope this helps!
Good luck!
Here is a link, which helped my through when I was asking your question:
https://m-square.com.au/mule-school-the-mulemessage-property-scopes-and-variables/
I hope it helps.
Session variables are used when you need the values within the application, as Session variables are Global throughout the application.
On the other hand, Outbound properties are used when you need the values outside the application into another application. Since outbound properties can cross across the transport barrier, we can easily get the value into other application, which the Session variable can't
Related
I know Session variables are persisted across some but not all transport barriers for example they are not propagated across the HTTP transport barrier.
Can anyone help me to know what are other transport barriers in mule which does not allow propagation of session variable.
Session variables set with a session variable transformer persist for the entire message lifecycle, regardless of transport barriers, except for the HTTP Connector which doesn’t propagate them.
Ref below link
session-variable-transformer-reference
Session variables are used when we want to retain the value(s) across transport barrier within the flow. These session variables will not be available in the http request flow API but only within the flow they are declared. They are meant to be use in place of flow variables when there is any transport request in the flow.
To carry values over http you can set outbound property which will be available as inbound property after http barrier.
Below link explains property scope in detail
https://blogs.mulesoft.com/dev/anypoint-platform-dev/mule-school-the-mulemessage-property-scopes-and-variables/
I have mule app with single mainFlow. Flow receives jms-message from MQ by quartz:inbound-endpoint, processes it and puts in another queue. Messages are independed. Is it possible to run multiple instances of my flow for concurrent message processing?
enter image description here
Yes. As long as your flow is neither transactional or two-way (request-response), you can set-up various asynchronous processing strategies.
You can add it either visually in the Studio in the flow's properties or by manually adding the attribute processingStrategy="...yourStrategy" to the flow's XML declaration.
For an in-depth guide to what everything means and does, see https://docs.mulesoft.com/mule-user-guide/v/3.8/flow-processing-strategies
I need to create an "accumulator" service to be used by Mule ESB applications.
This service will hold inbound messages until a certain number are received and then package those messages into a single outbound message.
This is the first time I've needed to write an ESB application that needs to maintain state (the collection of previously received messages) across inbound messages and I'm not quite sure how to get started.
I think what I need is a place to hang a reference to a data structure that holds my lists of inbound messages, but I'm not sure.
What's the best (most productive, most consistent with ESB best-practices) mechanism for managing "application-level" (i.e. cross-message) state data?
Thanks.
For this scenario you need to use the aggregator pattern. Please follow the below link .
http://www.mulesoft.org/documentation-3.2/display/32X/Message+Splitting+and+Aggregation
It looks to me that <set-property> only sets inbound properties (right?). How can I set outbound property, aiming to carry it across transport barriers and then use <copy-properties> to copy it to outbound from inbound.
I don't want to set session variables are lost amid flows by outbound endpoints
set-property adds outbound message properties. If you want to check all message properties use a logger component or you can use Mule 3.4.0 (Beta) that comes with a visual flow debugger.
Set-variable sets the properties in the INVOCATION scope.
Use message properties transformer to add variables in different scopes.
I was wondering whether anyone had any experience dynamically setting the name of the flow I want to redirect to in Mule? The use case is that I might have data coming in and I want to route the request to a specific flow based on the data coming in. However, the mule-config may not know of this flow until runtime, so I need to select a flow that corresponds to the data in a certain incoming field.
Many thanks.
Selecting a destination flow is usually done by sending a message to the inbound endpoint of the desired flow.
For example, if you use VM inbound endpoints in your different flows, you can then at runtime use a dynamic VM outbound endpoint that will target the right VM inbound endpoint.