VM Connector in Mule with Example





VM Connector in Mule with Example


  • The Virtual Machine (VM) connector handles intra-app and inter-app communication through asynchronous queues that can be transient or persistent.
  • Transient queues are faster than persistent queues, but they are not reliable in the case of a system crash.
  • Persistent queues are slower but reliable.
  • When running on a single instance, persistent queues work by serializing and storing the contents on the disk.


When to Use the VM Connector : 
  • When you want to pass messages from one flow to another through a queuing mechanism, instead of using <flow-ref /> directly.
  • When you want to distribute work across a cluster.
  • When you want to communicate with different apps that are running in the same Mule domain.
  • When you need simple queuing that does not justify a full JMS broker.
flow of VM Connector : 


VM connector configuration of test_vmFlow : 





VM connector configuration of test_vmFlow1 :




Note that Queue path should be same in both VM connectors.
flow variable of first flow can not be accessed in second flow because of transport barrier.

URL :  http://localhost:8085/api/vm
Method : GET

Output : 


XML project code :


<?xml version="1.0" encoding="UTF-8"?> <mule xmlns:vm="http://www.mulesoft.org/schema/mule/vm" xmlns:http="http://www.mulesoft.org/schema/mule/http" xmlns="http://www.mulesoft.org/schema/mule/core" xmlns:doc="http://www.mulesoft.org/schema/mule/documentation" xmlns:spring="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-current.xsd http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd http://www.mulesoft.org/schema/mule/http http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd http://www.mulesoft.org/schema/mule/vm http://www.mulesoft.org/schema/mule/vm/current/mule-vm.xsd"> <http:listener-config name="HTTP_Listener_Configuration" host="0.0.0.0" port="8085" basePath="/api" doc:name="HTTP Listener Configuration"/> <flow name="test_vmFlow"> <http:listener config-ref="HTTP_Listener_Configuration" path="/vm" doc:name="HTTP"/> <set-variable variableName="testvar" value="welcome to vm" doc:name="Variable"/> <vm:outbound-endpoint exchange-pattern="request-response" path="testqueue" doc:name="VM"/> <logger message="VM flow ends........" level="INFO" doc:name="Logger"/> </flow> <flow name="test_vmFlow1"> <vm:inbound-endpoint exchange-pattern="request-response" path="testqueue" doc:name="VM"/> <logger message="testvar value : #[flowVars.testvar]" level="INFO" doc:name="Logger"/> </flow> </mule>