Azure Service Bus Connector 3.4 の例 - Mule 4

このセクションの例では、次の作業を行うアプリケーションフローを示します。

これらの例では、一部の項目値に変数を使用しています。次のいずれかを実行できます。

始める前に

  • Java 8

  • Anypoint Studio 7.1.0 以降

  • Mule Runtime 4.2.x EE 以降

  • Azure Portal でテストするための新しいキューの作成

Mule プロジェクトを作成する

新しい Mule プロジェクトを作成してログイン情報を設定したら、提供される XML コードを使用して各例のアプリケーションフローを作成できます。

Mule プロジェクトを作成する手順は、次のとおりです。

  1. Studio で、​[File (ファイル)] > [New (新規)] > [Mule Project (Mule プロジェクト)]​ を選択します。

  2. Mule プロジェクトの名前を入力して、​[Finish (完了)]​ をクリックします。

  3. mule-app.properties​ という名前のファイルを作成して、​<project-name>/src/main/resources​ に保存します。

  4. mule-app.properties​ ファイルで Azure 接続ログイン情報を設定し、作成した Azure キューの名前を含めます。次に例を示します。

    #==============================================================
    #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
  5. ファイルを保存します。

  6. [Global Element Configuration (グローバル要素設定)]​ を開き、​[Test Connection (接続をテスト)]​ をクリックして、ログイン情報を検証します。

送受信の例

このフローは、​Send​ および ​Receive From Queue​ 操作を使用して、メッセージを送受信する方法を示しています。

Send および Receive From Queue 操作を使用する Azure Service Bus フローの例

このフローを作成する手順は、次のとおりです。

  1. Studio キャンバスで ​Configuration XML (設定 XML)​ をクリックします。

  2. <?xml version="1.0" encoding="UTF-8"?>​ 行の後のすべてのコンテンツを削除します。

  3. 次の XML をコピーして、​<?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>
  4. doc:id​ 値を再生成するように求められたら、​[Yes (はい)]​ をクリックします。

  5. プロジェクトを保存します。

  6. Studio キャンバスを右クリックし、​[Run project <project-name> (<project-name> プロジェクトを実行)]​ を選択してプロジェクトを実行します。

バッチ送受信の例

アプリケーションフローでは、​Send batch​ および ​Receive Batch​ 操作を使用して、Azure Service Bus キューのメッセージのバッチを送受信できます。

次のスクリーンショットは、バッチメッセージを送受信するアプリケーションフローを示しています。

バッチメッセージの送受信を示すアプリケーションフロー

このフローを作成する手順は、次のとおりです。

  1. Studio キャンバスで ​Configuration XML (設定 XML)​ をクリックします。

  2. <?xml version="1.0" encoding="UTF-8"?>​ 行の後のすべてのコンテンツを削除します。

  3. 次の XML をコピーして、​<?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>
  4. プロジェクトを保存します。

  5. Studio キャンバスを右クリックし、​[Run project <project-name> (<project-name> プロジェクトを実行)]​ を選択してプロジェクトを実行します。

メッセージの送信、リスン、肯定応答の例

このアプリケーションフローでは、​Send​ および ​Message Listener​ 操作を使用します。​Message Listener​ は、​MANUAL​ 肯定応答種別を使用します。つまり、アプリケーションロジックでメッセージ受信の肯定応答を行います。この例では、​Complete​ 操作を ​Message Listener​ と同じフローに追加することでそのロジックが提供されます。

次のスクリーンショットは、このフローを示しています。

Send、Message Listener、Complete 操作の使用方法を示すアプリケーションフロー

このフローを作成する手順は、次のとおりです。

  1. Studio キャンバスで ​Configuration XML (設定 XML)​ をクリックします。

  2. <?xml version="1.0" encoding="UTF-8"?>​ 行の後のすべてのコンテンツを削除します。

  3. 次の XML をコピーして、​<?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>
  4. doc:id​ 値を再生成するように求められたら、​[Yes (はい)]​ をクリックします。

  5. プロジェクトを保存します。

  6. Studio キャンバスを右クリックし、​[Run project <project-name> (<project-name> プロジェクトを実行)]​ を選択してプロジェクトを実行します。

Azure Active Directory Connector Provider を使用する

インスタンスの認証に Azure Active Directory を使用する組織もあります。上記の例のいずれも変更してこのシナリオに対応できます。Shared Access Signature (共有アクセス署名) 認証を Azure Active Directory 認証に置き換えます。

<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}" />

次の点を確認してください。

  • mule-app.properties​ ファイルに ​[Tenant Id (テナント ID)]​、​[Client Id (クライアント ID)]​、および ​[Client Secret (クライアントシークレット)]​ 項目が含まれている。

  • アプリケーション登録に適切な 権限とロール​が含まれている。