#============================================================== #Connection Parameters #============================================================== # Azure common authentication configuration azure.namespace=myazure queue.name=mytestqueue # Shared Access Signature authentication azure.keyname=SAStokenname azure.key=SAStoken # Azure Active Directory authentication azure.tenantId=TenantId azure.clientId=ClientId azure.clientSecret=ClientSecret
Azure Service Bus Connector 3.3 Examples - Mule 4
The examples in this section show application flows that:
-
Sends messages to and receives messages from Azure Service Bus
-
Sends and listens for messages and receives an acknowledgment using the
MANUAL
acknowledgment type
These examples use variables for some field values. You can either:
-
Replace the variables with their values in the code
-
Provide the values for each variable in a properties file and then refer to that file from the connector configuration
For more information about using a properties file, see Configuring Property Placeholders
Before You Begin
-
Java 8
-
Anypoint Studio 7.1.0 or later
-
Mule Runtime 4.2.x EE or later
-
Creation of a new queue for testing purpose on Azure Portal
Create a Mule Project
After you create a new Mule project and configure your credentials, you can create an application flow for each example by using the provided XML code.
To create a Mule project:
-
In Studio, select File > New > Mule Project.
-
Enter a name for your Mule project and click Finish.
-
Create a file named
mule-app.properties
and save it in<project-name>/src/main/resources
. -
Configure your Azure connection credentials in the file
mule-app.properties
, and include the name of the Azure queue you created, for example: -
Save the file.
-
Open the Global Element Configuration and click Test Connection to verify your credentials.
Send and Receive Example
This flow shows an example of how to use the Send and Receive From Queue operations to send and receive messages:
To create this flow:
-
In the Studio canvas, click Configuration XML.
-
Delete all the contents after the line
<?xml version="1.0" encoding="UTF-8"?>
. -
Copy and paste the following XML after the line
<?xml version="1.0" encoding="UTF-8"?>
:<mule xmlns:ee="http://www.mulesoft.org/schema/mule/ee/core" xmlns:http="http://www.mulesoft.org/schema/mule/http" xmlns:azure-service-bus-messaging="http://www.mulesoft.org/schema/mule/azure-service-bus-messaging" xmlns="http://www.mulesoft.org/schema/mule/core" xmlns:doc="http://www.mulesoft.org/schema/mule/documentation" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://www.mulesoft.org/schema/mule/ee/core http://www.mulesoft.org/schema/mule/ee/core/current/mule-ee.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/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd http://www.mulesoft.org/schema/mule/azure-service-bus-messaging http://www.mulesoft.org/schema/mule/azure-service-bus-messaging/current/mule-azure-service-bus-messaging.xsd"> <configuration-properties file="mule-app.properties" doc:name="Configuration properties"/> <http:listener-config name="HTTP_Listener_config" doc:name="HTTP Listener config" doc:id="290d1aa8-2e61-4707-8f04-65f0e5e4cf07" > <http:listener-connection host="0.0.0.0" port="8081" /> </http:listener-config> <azure-service-bus-messaging:config name="Azure_Service_Bus_Messaging_Connector_Config" doc:name="Azure Service Bus Messaging Connector Config" doc:id="71d0e711-6d29-4eff-b640-00986a41dfbc" > <azure-service-bus-messaging:sas-connection namespace="${azure.namespace}" sharedAccessKeyName="${azure.keyname}" sharedAccessKey="${azure.key}" /> </azure-service-bus-messaging:config> <flow name="send-flow" doc:id="2c8bce62-f192-4db2-9c70-792a5e78ac7f" > <http:listener doc:name="Send Message Endpoint" doc:id="aa79c404-2e41-4453-9fde-18b8ea74c805" config-ref="HTTP_Listener_config" path="/sendMessage" /> <ee:transform doc:name="Set Payload and Attributes" doc:id="bddebf8d-6d63-4db0-990f-94ecec23ddbd"> <ee:message> <ee:set-payload><![CDATA[%dw 2.0 output application/json --- { key1: "value1", key2: "value2 for Queue" }]]></ee:set-payload> </ee:message> <ee:variables> <ee:set-variable variableName="messageAttributes"><![CDATA[%dw 2.0 output application/json --- { messageId: "messageId1234", correlationStrategy: "AUTO", correlationId: "correlationId", label: "my_label", partitionKey: "the_partition_key", timeToLive: 60, ttlTimeUnit: "SECONDS", scheduledEnqueueTimeUtc: "2018-12-09 03:01:00.000", properties: { property1: "value1", property2: "value2" } }]]></ee:set-variable> </ee:variables> </ee:transform> <azure-service-bus-messaging:send doc:name="Queue Send" doc:id="50b3592c-f777-4667-b042-00fd266120e8" config-ref="Azure_Service_Bus_Messaging_Connector_Config" destinationName="${queue.name}" messageId="#[vars.messageAttributes.messageId]" correlationId="#[vars.messageAttributes.correlationId]" label="#[vars.messageAttributes.label]" sendCorrelationStrategy="#[vars.messageAttributes.correlationStrategy]" partitionKey="#[vars.messageAttributes.partitionKey]" timeToLive="#[vars.messageAttributes.timeToLive]" scheduledEnqueueTimeUtc='#[vars.messageAttributes.scheduledEnqueueTimeUtc as LocalDateTime {format: "yyyy-MM-dd HH:mm:ss.SSS"}]' timeToLiveTimeUnit="#[vars.messageAttributes.ttlTimeUnit]" properties="#[vars.messageAttributes.properties]"> </azure-service-bus-messaging:send> </flow> <flow name="queue-receiver-flow" doc:id="9b39aaa5-e81f-4257-b65e-d4f48c8ef2d8" > <http:listener doc:name="Receive From Queue" doc:id="386337a0-99c9-45cf-a81f-95d5e06f0b74" config-ref="HTTP_Listener_config" path="/receive"/> <azure-service-bus-messaging:receive doc:name="Receive From Queue" doc:id="05c8c754-79f6-4873-8329-af7f48f01d3b" config-ref="Azure_Service_Bus_Messaging_Connector_Config" destinationName="${queue.name}"/> <ee:transform doc:name="Attributes to Json" doc:id="a509a361-4bd7-4c6e-81cc-39ad36e7b625"> <ee:message> </ee:message> <ee:variables > <ee:set-variable variableName="jsonAttributes" ><![CDATA[%dw 2.0 output application/json --- attributes]]></ee:set-variable> </ee:variables> </ee:transform> <logger level="INFO" doc:name="Log Attributes" doc:id="94e7254c-a197-4fa2-b437-b64719acb23d" message="#[vars.jsonAttributes]" /> <logger level="INFO" doc:name="Log the message body" doc:id="d802b081-f3fc-4ec2-a23c-96bc0db3863c" message="#[payload]" /> </flow> </mule>
-
When you are prompted to regenerate
doc:id
values, click Yes. -
Save the project.
-
Right-click in the Studio canvas and select Run project <project-name> to run the project.
Batch Send and Receive Example
This application flow uses the Send batch and Receive Batch operations to send and receive batches of messages to and from an Azure Service Bus queue.
The following screenshot shows the application flow for sending and receiving batch messages:
To create this flow:
-
In the Studio canvas, click Configuration XML.
-
Delete all the contents after the line
<?xml version="1.0" encoding="UTF-8"?>
. -
Copy and paste the following XML after the line
<?xml version="1.0" encoding="UTF-8"?>
:<mule xmlns:ee="http://www.mulesoft.org/schema/mule/ee/core" xmlns:http="http://www.mulesoft.org/schema/mule/http" xmlns:azure-service-bus-messaging="http://www.mulesoft.org/schema/mule/azure-service-bus-messaging" xmlns="http://www.mulesoft.org/schema/mule/core" xmlns:doc="http://www.mulesoft.org/schema/mule/documentation" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://www.mulesoft.org/schema/mule/ee/core http://www.mulesoft.org/schema/mule/ee/core/current/mule-ee.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/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd http://www.mulesoft.org/schema/mule/azure-service-bus-messaging http://www.mulesoft.org/schema/mule/azure-service-bus-messaging/current/mule-azure-service-bus-messaging.xsd"> <configuration-properties file="mule-app.properties" doc:name="Configuration properties"/> <http:listener-config name="HTTP_Listener_config" doc:name="HTTP Listener config" doc:id="290d1aa8-2e61-4707-8f04-65f0e5e4cf07" > <http:listener-connection host="0.0.0.0" port="8081" /> </http:listener-config> <azure-service-bus-messaging:config name="Azure_Service_Bus_Messaging_Connector_Config" doc:name="Azure Service Bus Messaging Connector Config" doc:id="71d0e711-6d29-4eff-b640-00986a41dfbc" > <azure-service-bus-messaging:sas-connection namespace="${azure.namespace}" sharedAccessKeyName="${azure.keyname}" sharedAccessKey="${azure.key}" /> </azure-service-bus-messaging:config> <flow name="send-batch-flow" doc:id="2c8bce62-f192-4db2-9c70-792a5e78ac7f" > <http:listener doc:name="Send Message Endpoint" doc:id="aa79c404-2e41-4453-9fde-18b8ea74c805" config-ref="HTTP_Listener_config" path="/sendBatch" /> <ee:transform doc:name="Messages with Json Bodies and Properties" doc:id="1f28f155-28c8-4feb-834c-0e790cac7a53" > <ee:message > </ee:message> <ee:variables > <ee:set-variable variableName="messages" ><![CDATA[%dw 2.0 output application/java --- [{ body: "{\"key1\":\"value1\",\"key2\":\"otherValue1\"}" as Binary, messageId: "messageId1", sendCorrelationStrategy: "AUTO", correlationId: "correlation1", contentType: "application/json", replyToSessionId: "replyToSessionId1", label: "label_msg1", partitionKey: "the_partition_key1", timeToLive: 240, timeToLiveTimeUnit: "SECONDS", zoneId: "America/Buenos_Aires", scheduledEnqueueTimeUtc: "2018-12-09-00-0800" as LocalDateTime {format: "yyyy-MM-dd-HHZZZ"}, properties: { property1: "value1", property2: "value2" }, }, { body: "{\"key1\":\"value2\",\"key2\":\"otherValue2\"}" as Binary, messageId: "messageId2", sendCorrelationStrategy: "AUTO", correlationId: "correlation2", contentType: "application/json", replyToSessionId: "replyToSessionId2", label: "label_msg2", partitionKey: "the_partition_key2", timeToLive: 240, timeToLiveTimeUnit: "SECONDS", zoneId: "America/Buenos_Aires", scheduledEnqueueTimeUtc: "2018-12-09-00-0800" as LocalDateTime {format: "yyyy-MM-dd-HHZZZ"}, properties: { property1: "value1", property2: "value2" }, }, { body: "{\"key1\":\"value3\",\"key2\":\"otherValue3\"}" as Binary, messageId: "messageId3", sendCorrelationStrategy: "AUTO", correlationId: "correlation3", contentType: "application/json", replyToSessionId: "replyToSessionId3", label: "label_msg3", partitionKey: "the_partition_key3", timeToLive: 240, timeToLiveTimeUnit: "SECONDS", zoneId: "America/Buenos_Aires", scheduledEnqueueTimeUtc: "2018-12-09-00-0800" as LocalDateTime {format: "yyyy-MM-dd-HHZZZ"}, properties: { property1: "value1", property2: "value2" }, }]]]></ee:set-variable> </ee:variables> </ee:transform> <azure-service-bus-messaging:send-message-batch destinationName="${queue.name}" doc:name="Send batch of messages" doc:id="799d9ba3-68a9-4ef7-b518-6a715429b2a7" config-ref="Azure_Service_Bus_Messaging_Connector_Config"> <azure-service-bus-messaging:messages ><![CDATA[#[vars.messages]]]></azure-service-bus-messaging:messages> </azure-service-bus-messaging:send-message-batch> <set-payload value='#[%dw 2.0 output application/json --- { result: "Messages sent!" }]' doc:name="Set Payload" doc:id="c8b39b61-fa84-496d-b92c-e970a1a44003" /> </flow> <flow name="queue-receiver-flow" doc:id="9b39aaa5-e81f-4257-b65e-d4f48c8ef2d8" > <http:listener doc:name="Receive Batch From Queue" doc:id="386337a0-99c9-45cf-a81f-95d5e06f0b74" config-ref="HTTP_Listener_config" path="/receiveBatch"/> <azure-service-bus-messaging:receive-batch doc:name="Receive Batch" doc:id="ee30123a-cc9f-4e08-a2e9-c41aede3923f" config-ref="Azure_Service_Bus_Messaging_Connector_Config" maxMessageCount="3" destinationName="${queue.name}"/> <foreach doc:name="For Each" doc:id="16a42925-3142-48c7-9973-f951029af5fa" > <logger level="INFO" doc:name="Logger" doc:id="a5bfc3c6-2335-4c4e-845e-a67cf990a510" message='#["Received message number " ++ vars.counter]'/> <ee:transform doc:name="Attributes to Json" doc:id="a509a361-4bd7-4c6e-81cc-39ad36e7b625"> <ee:message> </ee:message> <ee:variables> <ee:set-variable variableName="jsonAttributes"><![CDATA[%dw 2.0 output application/json --- attributes]]></ee:set-variable> </ee:variables> </ee:transform> <logger level="INFO" doc:name="Log Attributes" doc:id="94e7254c-a197-4fa2-b437-b64719acb23d" message="#[vars.jsonAttributes]" /> <logger level="INFO" doc:name="Log the message body" doc:id="d802b081-f3fc-4ec2-a23c-96bc0db3863c" message="#[%dw 2.0 output application/json --- payload]" /> </foreach> </flow> </mule>
-
Save the project.
-
Right-click in the Studio canvas and select Run project <project-name> to run the project.
Send, Listen, and Acknowledge the Message Example
This application flow uses the Send and Message Listener operations. The Message Listener is using the MANUAL
acknowledgment type, which means that the application logic is responsible for acknowledging receipt of the message. In this example, that logic is provided by adding the Complete operation to the same flow as the Message Listener.
The following screenshot shows this flow:
To create this flow:
-
In the Studio canvas, click Configuration XML.
-
Delete all the contents after the line
<?xml version="1.0" encoding="UTF-8"?>
. -
Copy and paste the following XML after the line
<?xml version="1.0" encoding="UTF-8"?>
:<mule xmlns:ee="http://www.mulesoft.org/schema/mule/ee/core" xmlns:http="http://www.mulesoft.org/schema/mule/http" xmlns:azure-service-bus-messaging="http://www.mulesoft.org/schema/mule/azure-service-bus-messaging" xmlns="http://www.mulesoft.org/schema/mule/core" xmlns:doc="http://www.mulesoft.org/schema/mule/documentation" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://www.mulesoft.org/schema/mule/ee/core http://www.mulesoft.org/schema/mule/ee/core/current/mule-ee.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/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd http://www.mulesoft.org/schema/mule/azure-service-bus-messaging http://www.mulesoft.org/schema/mule/azure-service-bus-messaging/current/mule-azure-service-bus-messaging.xsd"> <configuration-properties file="mule-app.properties" doc:name="Configuration properties"/> <http:listener-config name="HTTP_Listener_config" doc:name="HTTP Listener config" doc:id="290d1aa8-2e61-4707-8f04-65f0e5e4cf07" > <http:listener-connection host="0.0.0.0" port="8081" /> </http:listener-config> <azure-service-bus-messaging:config name="Azure_Service_Bus_Messaging_Connector_Config" doc:name="Azure Service Bus Messaging Connector Config" doc:id="71d0e711-6d29-4eff-b640-00986a41dfbc" > <azure-service-bus-messaging:sas-connection namespace="${azure.namespace}" sharedAccessKeyName="${azure.keyname}" sharedAccessKey="${azure.key}" /> </azure-service-bus-messaging:config> <flow name="send-endpoint-flow" doc:id="2c8bce62-f192-4db2-9c70-792a5e78ac7f" > <http:listener doc:name="Send Queue Endpoint" doc:id="aa79c404-2e41-4453-9fde-18b8ea74c805" config-ref="HTTP_Listener_config" path="/sendMessage" /> <ee:transform doc:name="Set Payload and Attributes" doc:id="bddebf8d-6d63-4db0-990f-94ecec23ddbd" > <ee:message > <ee:set-payload ><![CDATA[%dw 2.0 output application/json --- { key1: "value1", key2: "value2 for Queue" }]]></ee:set-payload> </ee:message> <ee:variables > <ee:set-variable variableName="messageAttributes" ><![CDATA[%dw 2.0 output application/json --- { messageId: "messageId1234", correlationStrategy: "AUTO", correlationId: "correlationId", label: "my_label", partitionKey: "the_partition_key", timeToLive: 60, ttlTimeUnit: "SECONDS", scheduledEnqueueTimeUtc: "2018-12-09 03:01:00.000", properties: { property1: "value1", property2: "value2" } }]]></ee:set-variable> </ee:variables> </ee:transform> <azure-service-bus-messaging:send doc:name="Queue Send" doc:id="50b3592c-f777-4667-b042-00fd266120e8" config-ref="Azure_Service_Bus_Messaging_Connector_Config" destinationName="${queue.name}" messageId='#[vars.messageAttributes.messageId]' correlationId="#[vars.messageAttributes.correlationId]" label="#[vars.messageAttributes.label]" sendCorrelationStrategy="#[vars.messageAttributes.correlationStrategy]" partitionKey="#[vars.messageAttributes.partitionKey]" timeToLive="#[vars.messageAttributes.timeToLive]" scheduledEnqueueTimeUtc='#[vars.messageAttributes.scheduledEnqueueTimeUtc as LocalDateTime {format: "yyyy-MM-dd HH:mm:ss.SSS"}]' timeToLiveTimeUnit="#[vars.messageAttributes.ttlTimeUnit]" properties="#[vars.messageAttributes.properties]"> </azure-service-bus-messaging:send> </flow> <flow name="listener-manual-ack-flow" doc:id="541d4149-41b1-43e4-8d61-c16cf3ee502f" > <azure-service-bus-messaging:message-listener doc:name="Message listener" doc:id="cb61833e-9e1f-48b3-9430-a83b47c11a4c" config-ref="Azure_Service_Bus_Messaging_Connector_Config" ackMode="MANUAL" destinationName="${queue.name}" numberOfConsumers="1"/> <logger level="INFO" doc:name="Log the message" doc:id="d802b081-f3fc-4ec2-a23c-96bc0db3863c" message="#[payload]"/> <ee:transform doc:name="Attributes to Json" doc:id="a509a361-4bd7-4c6e-81cc-39ad36e7b625" > <ee:message > <ee:set-payload ><![CDATA[%dw 2.0 output application/json --- attributes]]></ee:set-payload> </ee:message> </ee:transform> <logger level="INFO" doc:name="Log Attributes" doc:id="94e7254c-a197-4fa2-b437-b64719acb23d" message="#[payload]"/> <azure-service-bus-messaging:complete-message doc:name="Ack of Message" doc:id="6aa7238b-3bc9-4a61-a39b-e1bd260ee7c5" config-ref="Azure_Service_Bus_Messaging_Connector_Config" lockToken="#[attributes.lockToken]" /> <logger level="INFO" doc:name="Log Lock Token" doc:id="a91eea3e-231a-4675-9457-b6c7366ab647" message='#["LockToken = " ++ payload.lockToken]'/> </flow> </mule>
-
When you are prompted to regenerate
doc:id
values, click Yes. -
Save the project.
-
Right-click in the Studio canvas and select Run project <project-name> to run the project.
Using Azure Active Directory Connector Provider
Some organizations use Azure Active Directory to authenticate their instances. Any of the previous examples can be modified to support this scenario. Replace the Shared Access Signature authentication with the Azure Active Directory authentication:
<azure-service-bus-messaging:sas-connection namespace="${azure.namespace}" sharedAccessKeyName="${azure.keyname}" sharedAccessKey="${azure.key}" />
<azure-service-bus-messaging:aad-connection namespace="${azure.namespace}" tenantId="${azure.tenantId}" clientId="${azure.clientId}" clientSecret="${azure.clientSecret}" />
Ensure that:
-
Your
mule-app.properties
file contains the Tenant Id, Client Id, and Client Secret fields. -
Your app registration contains the proper permissions and roles.