2013-06-05 2 views
2

액세스를 제한해야하는 백 엔드 서비스가 있습니다. 여기에 설명 된 접근 방법을 사용하려고합니다. http://blogs.mulesoft.org/synchronous-and-asynchronous-throttling-2/백엔드 서비스에서 노새 스로틀

SOAP 요청을 수신하고 전달하는 간단한 통과를 시작했습니다. SOAPUI 유틸리티를 사용하여이 작업을 수행하면 두 번째 또는 두 번째 예상 응답을 얻습니다.

<http:connector name="httpConnector" doc:name="HTTP\HTTPS"> 
    <receiver-threading-profile maxThreadsActive="1" maxBufferSize="100" /> 
</http:connector> 

<jms:activemq-connector name="amqConnector" brokerURL="tcp://localhost:61616" specification="1.1" doc:name="AMQ" /> 

<flow name="Flow1" processingStrategy="synchronous" doc:name="Flow1"> 

    <http:inbound-endpoint exchange-pattern="request-response" 
     host="localhost" port="8088" path="test" doc:name="HTTP" 
     mimeType="text/xml" encoding="UTF-8" connector-ref="httpConnector"/> 

    <http:outbound-endpoint 
     address="http://dnbdirect-api.dnb.com/DnBAPI-11" 
     exchange-pattern="request-response" doc:name="HTTP" mimeType="text/xml"/> 
</flow> 

그런 다음 아웃 바운드 호출을 별도의 흐름으로 이동하고 요청 - 응답 블록을 추가하면 동작이 변경됩니다. 나는 응답을 얻지 못하고 (로거에서 "큐 이후"메시지도받지 못함) 결국 SOAPUI가 시간 초과됩니다.

<http:connector name="httpConnector" doc:name="HTTP\HTTPS"> 
    <receiver-threading-profile maxThreadsActive="1" maxBufferSize="100" /> 
</http:connector> 

<jms:activemq-connector name="amqConnector" brokerURL="tcp://localhost:61616" specification="1.1" doc:name="AMQ" /> 

<flow name="Flow1" processingStrategy="synchronous" doc:name="Flow1"> 

    <http:inbound-endpoint exchange-pattern="request-response" 
     host="localhost" port="8088" path="test" doc:name="HTTP" 
     mimeType="text/xml" encoding="UTF-8" connector-ref="httpConnector"/> 

    <message-properties-transformer doc:name="Message Properties"> 
     <add-message-property key="AMQ_SCHEDULED_DELAY" value="5000"/> 
    </message-properties-transformer> 

    <logger message="Before queue" level="INFO"/> 

    <request-reply> 
     <jms:outbound-endpoint queue="request" connector-ref="amqConnector"></jms:outbound-endpoint> 
     <jms:inbound-endpoint queue="response" connector-ref="amqConnector"></jms:inbound-endpoint> 
    </request-reply> 

    <logger message="After queue" level="INFO"/> 
</flow> 

<flow name="flow2" doc:name="Flow2"> 

    <jms:inbound-endpoint queue="request" connector-ref="amqConnector" doc:name="JMS"/> 

    <http:outbound-endpoint 
     address="http://dnbdirect-api.dnb.com/DnBAPI-11" 
     exchange-pattern="request-response" doc:name="HTTP" mimeType="text/xml" /> 
</flow> 

백 엔드 서비스에 대한 호출을 끌어 오면 지연이 나타나는 것처럼 조절 동작이 작동합니다. 그러나 나는 거기서 서비스 콜을 사용할 수 없다.

무엇이 누락 되었습니까? flow2에서 HTTP 아웃 바운드 엔드 포인트 전에 다음을 추가

+0

시도가가 http 후 로거 추가 : 당신의 flow2에서 아웃 바운드 및 페이로드 무엇인지 확인하십시오. – user1760178

+0

나는 가지고 있고 그것이 올바른 것으로 보인다. 나는 길이 때문에이 주석에 넣을 수 없다. (나는 StackOverflow에 익숙하지 않다.) 그것을 원래의 메시지에 추가하는 것은 정상적인 일인가? – Tad

답변

1

나는 메시지의 페이로드는 "요청 - 응답"후 "의 ArrayList"가됩니다 것을 발견했다. 그래서 자바 구성 요소를 추가하여 분할하면 결과가 수정됩니다.

@Override 
public Object onCall(MuleEventContext eventContext) throws Exception { 
    MuleMessage message = eventContext.getMessage(); 

    //int groupSize = message.getCorrelationGroupSize(); 
    //System.out.println("############# correlationGroupSize: " + groupSize); 

    Object payload = message.getPayload(); 
    if (payload != null && payload instanceof ArrayList) { 
     //message.setPayload(((ArrayList)payload).get(0)); 
     return ((ArrayList)payload).get(0); 
    } 

    return message.getPayload(); 
} 

완성 된 흐름은 다음과 같습니다


<message-properties-transformer doc:name="Message Properties"> 
     <add-message-property key="AMQ_SCHEDULED_DELAY" value="10000"/> 
    </message-properties-transformer> 

    <request-reply storePrefix="mainFlow"> 
     <jms:outbound-endpoint queue="request" connector-ref="amqConnector" doc:name="JMS"></jms:outbound-endpoint> 
     <jms:inbound-endpoint queue="response" connector-ref="amqConnector" doc:name="JMS"></jms:inbound-endpoint> 
    </request-reply> 
    <component class="com.neusoft.fx.JmsMessageTransformer" doc:name="Java"/> 
    <message-properties-transformer doc:name="Set Content Type"> 
     <delete-message-property key="Content-type" /> 
     <add-message-property key="Content-Type" value="text/xml"/> 
    </message-properties-transformer> 
    <logger message="----- LOGGER ----- after #[groovy:message.toString()]" level="INFO" doc:name="Logger" /> 
</flow> 
+0

참조 : http://blogs.mulesoft.org/asynchronous-message-processing-with-mule/ – FelixFang

0

봅니다 :

<copy-properties propertyName="MULE_*"/> 
+0

아니, 그게 도움이되지 않습니다. – Tad

+0

그것으로 저를 위해 일했습니다. 그 변경 사항으로 새로운 구성을 보여줄 수 있습니까? – Seba

+0

부분적으로 교정되었습니다. 흐름은 여전히 ​​성공하지 못하고 있습니다. 즉, 예상 한 결과를 얻지 못하고 있지만, 그 행동은 그 추가로 변경되었습니다. 지금은 시간 초과없이 로깅 후 "로 이동 중입니다. 결과 페이로드는 예상대로 (즉, 큐를 사용하지 않고) 보이지 않습니다. 아마도 대기열을 통과하는 것이 정보의 형식을 변경하고있을 것입니까? 어쨌든, 귀하의 요청을 처리하기 위해 의견에 맞지 않으므로 후속 구성을 게시하는 방법은 무엇입니까? 원래 메시지를 변경해야합니까? – Tad