2014-01-06 7 views
0

Я хочу прокси-сервер RemoteUserStoreManagerService (выставлен на WSO2 IS) через WSO2 ESB.WSO2 ESB Proxy для WSO2 IS RemoteUserStoreManagerService

Когда я вызываю операцию getUserClaimValuesForClaims, я получаю ответ. Я тестировал WSO2 IS (подключенный к моему Active Directory) для производительности. Я отправил запросы в 100 потоков (каждый поток с задержкой в ​​250 мс), и это дало мне средний ответ 250 мс (это нормально для меня).

Таким образом, я проксировал операцию getUserClaimValuesForClaims, используя прокси Transformation, и он также работал. Но во время тестирования производительности (с той же или меньшей нагрузкой) у меня появились следующие ошибки, и не все сообщения вернулись (в среднем 1 из 100 сообщений).

[2014-01-06 19:28:21,047] INFO - LogMediator To: http://www.w3.org/2005/08/addressing/anonymous, WSAction: , SOAPAction: , MessageID: urn:uuid:d2b85c03-beaf-409b-bf39-2e8143bd9e0b, Direction: response 
[2014-01-06 19:28:38,441] ERROR - SourceHandler I/O error: An established connection was aborted by the software in your host machine 
    java.io.IOException: An established connection was aborted by the software in your host machine 
    at sun.nio.ch.SocketDispatcher.read0(Native Method) 
    at sun.nio.ch.SocketDispatcher.read(SocketDispatcher.java:25) 
    at sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java:202) 
    at sun.nio.ch.IOUtil.read(IOUtil.java:175) 
    at sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:243) 
    at org.apache.http.nio.reactor.ssl.SSLIOSession.receiveEncryptedData(SSLIOSession.java:348) 
    at org.apache.http.nio.reactor.ssl.SSLIOSession.isAppInputReady(SSLIOSession.java:376) 
    at org.apache.http.impl.nio.reactor.AbstractIODispatch.inputReady 
[2014-01-06 19:29:14,051] WARN - TargetHandler http-outgoing-66: Connection time out while in state: REQUEST_DONE 
[2014-01-06 19:29:14,061] WARN - EndpointContext Endpoint : AnonymousEndpoint will be marked SUSPENDED as it failed 
[2014-01-06 19:29:15,041] WARN - EndpointContext Suspending endpoint : AnonymousEndpoint - last suspend duration was : 30000ms and current suspend duration is : 30000ms - Next retry after : Mon 
[2014-01-06 19:29:14,451] WARN - SourceHandler Connection time out after request is read: http-incoming-57 

Я думаю, что он говорит, это тайм-ауты на бэкэнд; но я получаю ответ, записанный в faultSeuence.

Я заметил, что проблема вызвана медиатором XSLT в реализации прокси, потому что когда я удалял медиаторы xslt, журнал пуст. Я попробовал xquery, и все было так. Эти проблемы вызывают даже посредник журнала в outSequence.

Вот мой последний прокси.

<?xml version="1.0" encoding="UTF-8"?> 
<proxy xmlns="http://ws.apache.org/ns/synapse" name="GetUserProxy" transports="https http" startOnLoad="true" trace="disable"> 
<target> 
    <endpoint> 
     <address uri="https://localhost:9443/services/RemoteUserStoreManagerService.RemoteUserStoreManagerServiceHttpsSoap12Endpoint/"/> 
    </endpoint> 
    <inSequence/> 
    <outSequence> 
     <log/> 
     <send/> 
    </outSequence> 
    <faultSequence/> 
</target> 
</proxy> 

Когда я извлекаю посредник журнала, WARN MESSAgES disapears из журнала и ВСЕ ответные сообщения возвращаются в SoapUI.

Может ли кто-нибудь сказать мне, почему он ведет себя таким образом? спасибо. David

ответ

0

Какие версии ESB и IS работают с ..?

попытайтесь перезагрузить ESB и снова вызовите службу. Помните, что вызов на сервер Identity является безопасным вызовом.

+0

Привет, Abhi, я использую wso2esb-4.8.0. – David

+0

Если WSO2IS отлично работает, когда вы вызываете самостоятельно (используя curl или soapUI). Затем попытайтесь закрыть соединение явно в вашем прокси в ESB Abhi

+0

Благодарим вас за подсказку Abhi. Но теперь 2 сообщения из 1000 не приходили, используя медиаторы XSLT. [2014-01-07 18: 06: 55,422] ERROR - исключение NativeWorkerPool Uncaught org.apache.axiom.om.OMException: javax.xml.stream.XMLStreamException: ParseError в [row, col]: [8,21] Сообщение: Разметка в документе, следующем за корневым элементом, должна быть хорошо сформирована. [2014-01-07 18: 06: 55,578] ОШИБКА - Ошибка RelayUtils при создании Passthrough stream org.apache.axiom.om.OMException: javax.xml.stream.XMLStreamException: ParseError в [row, col]: [1, 1] Сообщение: Содержимое не допускается в прологе. – David

1

RemoteUserStoreManagerService - это служба администратора. Поэтому вам необходимо отправить имя пользователя/пароль Identity Server в базовый заголовок аутентификации или файл cookie сеанса. Я не могу видеть настройки заголовков авторизации в конфигурации прокси-сервера, такие как следующие

<property expression="fn:concat('Basic ', base64Encode('username:password'))" name="Authorization" scope="transport"></property> 

Подробнее будет here. Также вам нужно создать тело сообщения для отправки в «RemoteUserStoreManagerService» и прочитать ответные сообщения. Они должны быть реализованы с использованием конфигурации ESB. Однако вы также можете создать собственный ESB-посредник. Пример кода Java для вызова этой услуги можно найти here. Вы можете найти подробную информацию о написании пользовательского посредника от here

+0

Спасибо, за ответ Асела. Я отправляю auth заголовки. Я пропустил эту строку в реализации прокси для ясности. Я отправляю заголовок auth из SoapUI в прокси-сервер и распространяется на WSO2 IS. Он работает, но проблема возникает при большой нагрузке. – David

1

Мы выяснили, что проблема, вероятно, более общая и относится не только к WSO2 IS, потому что у нас та же проблема, когда мы используем услугу WSO2 IS, SoapUI макет.

Проблема, вероятно, связана с транспортом HTTP-passthru в конфигурации оси, потому что, когда мы перешли на HTTP-NIO, проблема исчезает, и это еще быстрее.

Это сообщение о performance tunnig, которое нам помогло.

Howevever, я хотел бы знать, какой транспорт мы должны использовать в производстве или где проблема. Потому что теперь кажется, что мы не можем использовать транспорт HTTP-passthru для производственной среды.

Неужели кто-нибудь испытывает эту проблему?