WSO2 Message Processor 機能を使用して WS 負荷調整 (スロットリング) を実装しようとしています。基本的な考え方は、クライアントからの要求とバックエンドからの応答が WSO2 の 2 つの異なるメッセージ ストアでキューに入れられるということです。2 つのメッセージ プロセッサが 1 秒ごとにキューからメッセージを取得し、それぞれの受信者に送信します。その間、クライアントは双方向通信であるため、ブロックされた状態で待機します。
メディエーションのスキーマは次のとおりです。
STEP 1: Client -> Proxy (Stores client request message in requests queue)
STEP 2: Message Processor "Requests" reads message from requests queue -> Sends to "echo" Enpoint -> Sends to "store" Sequence (stores echo response request message in responses queue)
STEP 3: Message Processor "Responses" reads message from response queue -> Sends to Reply sequence
STEP 4: Reply Sequence -> Client
私のプライマリ プロキシは Queue と呼ばれ、エコー プロキシをバックエンド エンドポイントとしてテストを実行しています。これは、フローの 4 つのステップのログ出力です。
最初にリクエストを受け取り、リクエストメッセージストアに保存します
2014-05-27 20:32:50,789] INFO - LogMediator STEP = 1 Store Request
2014-05-27 20:32:50,793] INFO - LogMediator To:
/services/Queue.QueueHttpSoap12Endpoint, WSAction: urn:mediate, SOAPAction: urn:mediate, MessageID: urn:uuid:ff2f0caa-cab9-4ece-8bb1-223a7ba97bf2, Direction: request, Envelope:
<?xml version="1.0" encoding="utf-8"?><soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope"
xmlns:echo="http://echo.services.core.carbon.wso2.org"><soap:Body>
<echo:echoString>
<in>test</in>
</echo:echoString>
</soap:Body></soap:Envelope>
1 秒後、リクエスト メッセージ プロセッサはリクエスト メッセージ ストアから読み取り、エコー エンドポイントに送信します。
2014-05-27 20:32:50,813] INFO - LogMediator WHEN = 2 Send Request to Backend
2014-05-27 20:32:50,814] INFO - LogMediator To:
/services/testt.testtHttpSoap12Endpoint, WSAction: urn:mediate, SOAPAction: urn:mediate,
MessageID: urn:uuid:86b9f0d0-b970-4933-9be5-674799c9df4d, Direction: request, Envelope:
<?xml version="1.0" encoding="utf-8"?><soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope"
xmlns:echo="http://echo.services.core.carbon.wso2.org"><soap:Body>
<echo:echoString>
<in>test</in>
</echo:echoString>
</soap:Body></soap:Envelope>
エコーからの応答が受信され、応答メッセージ キューに格納されます
2014-05-27 20:32:50,843] INFO - LogMediator Step = 3 Receive Response from Backend and Store
2014-05-27 20:34:13,914] INFO - LogMediator To:
http://www.w3.org/2005/08/addressing/anonymous, WSAction: , SOAPAction: , MessageID:
urn:uid:151B5E166555B48DAF818687464483291310017303, Direction: response, Envelope: <?
xml version="1.0" encoding="utf-8"?><soapenv:Envelope xmlns
soapenv="http://www.w3.org/2003/05/soap-envelope"><soapenv:Body><ns:echoStringResponse
xmlns:ns="http://echo.services.core.carbon.wso2.org"
<return>test</return></ns:echoStringResponse></soapenv:Body></soapenv:Envelope>
ここまでは順調ですが、最後のステップで Message Processor が応答キューを読み取り、クライアントにメッセージを送信しようとしますが、失敗します
2014-05-27 20:34:13,913] INFO - LogMediator WHEN = 4 Send Response Message to client
2014-05-27 20:34:13,914] INFO - LogMediator To:
http://www.w3.org/2005/08/addressing/anonymous, WSAction: , SOAPAction: , MessageID:
urn:uuid:151B5E166555B48DAF818687464483291310017303, Direction: response, Envelope: <?xml
version="1.0" encoding="utf-8"?><soapenv:Envelope xmlns
soapenv="http://www.w3.org/2003/05/soap-envelope"><soapenv:Body><ns:echoStringResponse
xmlns:ns="http://echo.services.core.carbon.wso2.org"
<return>test</return></ns:echoStringResponse></soapenv:Body></soapenv:Envelope>
2014-05-27 20:34:13,915] ERROR - PassThroughHttpSender No valid destination EPR to send message
2014-05-27 20:34:13,915] ERROR - Axis2Sender Content-Type:application/soap+xml;
charset=UTF-8; action="urn:echoStringResponse",<?xml versio
="1.0" encoding="utf-8"?><soapenv:Envelope
xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope"><soapenv:Body>
<ns:echoStringResponse xmls:ns="http://echo.services.core.carbon.wso2.org"><return>test</return>
</ns:echoStringResponse></soapenv:Body></soapenv:Envelope> Unexpected
error sending message back org.apache.axis2.AxisFault: No valid destination EPR to send message
"To: http://www.w3.org/2005/08/addressing/anonymous " は有効な EPR とは思えません。
質問: コードなしで WSO2 を介してこの種の要求バッファリングを実現することは可能ですか? もしそうなら、私は何を間違っていますか?事前に感謝します。