<mule-domain xmlns="http://www.mulesoft.org/schema/mule/domain"
  xmlns:vm="http://www.mulesoft.org/schema/mule/vm"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://www.mulesoft.org/schema/mule/vm
  http://www.mulesoft.org/schema/mule/vm/current/mule-vm.xsd
  http://www.mulesoft.org/schema/mule/domain
  http://www.mulesoft.org/schema/mule/domain/current/mule-domain.xsd">
  <vm:config name="sharedVMConfig">
    <vm:queue queueName="sharedQueue" queueType="PERSISTENT" />
  </vm:config>
</mule-domain>
VM Connector Send Messages across Different Apps Example
The following examples show two ways to send messages across different apps:
- 
Use a Listener to receive the messages from the first app and a Publish operation to feed the received messages to a second app.
 - 
Use a Publish operation in a second app to push messages to the queue of messages, and a Consume operation to consume the messages.
 
In both cases, the two apps must be in the same domain.
Publish Messages to a Second App
- 
Create a VM configuration in a domain, like this:
 - 
Place a listener in an app in the same domain:
<flow name="crossAppListener"> <vm:listener queueName="sharedQueue" config-ref="sharedVMConfig" /> <logger /> </flow> - 
Publish messages from a second app in the same domain:
<flow name="crossAppRequester"> <vm:publish queueName="sharedQueue" config-ref="sharedVMConfig" /> </flow> 
In this example, the Listener and Publish operation point to the same queue (sharedQueue) and the same configuration (sharedVMConfig).
Pull Published Messages from a Queue
Instead of using the <vm:listener> message source, you can consume messages in a VM queue through the <vm:consume> operation. This operation can consume messages on demand, allowing you to:
- 
Dynamically consume from different queues depending on a certain condition.
 - 
Have a tighter control on the rhythm at which the app consumes messages.
 
To consume published messages from a queue:
- 
Create a VM configuration in a domain, like this:
<mule-domain xmlns="http://www.mulesoft.org/schema/mule/domain" xmlns:vm="http://www.mulesoft.org/schema/mule/vm" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.mulesoft.org/schema/mule/vm http://www.mulesoft.org/schema/mule/vm/current/mule-vm.xsd http://www.mulesoft.org/schema/mule/domain http://www.mulesoft.org/schema/mule/domain/current/mule-domain.xsd"> <vm:config name="sharedVMConfig"> <vm:queue queueName="sharedQueue" queueType="PERSISTENT" /> </vm:config> </mule-domain> - 
Publish messages from a second app in the same domain:
<flow name="crossAppRequester"> <vm:publish queueName="sharedQueue" config-ref="sharedVMConfig" /> </flow> - 
Pull messages from the queue after they are published.
<flow name="queueConsume"> <vm:consume queueName="sharedQueue" config-ref="sharedVMConfig" /> <logger /> </flow> 
In this example, the Publish and Consume operations point to the same queue (sharedQueue) and the same configuration (sharedVMConfig).



