Серверная часть Mqtt через веб-сокет

У нас есть брокер Mqtt в серверной части, который настроен на прием соединений через WebSocket. Все работает, когда я подключаюсь напрямую к этой машине. Но мы хотели бы направлять все звонки через Enterprise integrator. Кажется, я не могу заставить это работать правильно. Серверный веб-сокет прослушивает путь, а не корень (например, машина: 9999/api/mqtt). В целях тестирования серверный брокер Mqtt не имеет защиты. Он принимает каждое соединение, и все могут подписываться и публиковать.

Изменения в axis.xml

<transportReceiver name="mqtt" class="org.apache.axis2.transport.mqtt.MqttListener">
    <parameter locked="false" name="mqttConFactory">
        <parameter locked="false" name="mqtt.server.host.name">workerv2</parameter>
        <parameter name="mqtt.connection.factory">mqttConFactory</parameter>
        <parameter locked="false" name="mqtt.server.port">9026</parameter>
        <parameter locked="false" name="mqtt.client.id">client-id-1234</parameter>
        <parameter locked="false" name="mqtt.topic.name">esb.test</parameter>
    </parameter>
</transportReceiver>

<transportSender name="ws" class="org.wso2.carbon.websocket.transport.WebsocketTransportSender">
    <parameter name="ws.outflow.dispatch.sequence" locked="false">outflowDispatchSeq</parameter>
    <parameter name="ws.outflow.dispatch.fault.sequence" locked="false">outflowFaultSeq</parameter>
</transportSender>

Я скопировал файл jar в папку libs: org.exlipse.paho.client.mqttv3-1.1.0.jar.

Я настроил свои последовательности и входящую конечную точку веб-сокета в соответствии с примером здесь

Я не знаю, как решить эту проблему, я настроил log4j для отображения журналов проводов, но не могу получить от них никакой информации. Я не вижу никаких ошибок, поэтому я думаю, что должен быть рядом (?)

Не могли бы вы мне помочь?

РЕДАКТИРОВАТЬ

Мне удалось настроить подключение через веб-сокет к веб-сокету. При прямом подключении веб-сокет работает, и я могу успешно подключиться. Но когда я подключаюсь через wso2ei, я вижу сообщение в журнале, и все выглядит нормально. Но время ожидания всех запросов истекает через 120 секунд. Я не могу отлаживать заголовки для веб-сокетов. Любая помощь будет оценена по достоинству.

Например, моя последовательность отправки:

<?xml version="1.0" encoding="UTF-8"?>
<sequence name="dispatchSeq" xmlns="http://ws.apache.org/ns/synapse">
    <log level="full">
        <property name="LOGGED_MESSAGE" value="LOGGED"/>
    </log>
    <send>
        <endpoint>
            <address uri="ws://10.100.14.8:9026/api/v2/mqtt"/>
        </endpoint>
    </send>
</sequence>

Моя выходная последовательность

<?xml version="1.0" encoding="UTF-8"?>
<sequence name="outDispatchSeq" trace="enable" xmlns="http://ws.apache.org/ns/synapse">
    <log level="full"/>
    <respond/>
</sequence>

Моя входящая конечная точка

<?xml version="1.0" encoding="UTF-8"?><inboundEndpoint xmlns="http://ws.apache.org/ns/synapse" name="testMQTT" sequence="dispatchSeq" onError="fault" protocol="ws" suspend="false">
<parameters>
    <parameter name="inbound.ws.port">9091</parameter>
    <parameter name="ws.client.side.broadcast.level">0</parameter>
    <parameter name="ws.outflow.dispatch.sequence">outDispatchSeq</parameter>
    <parameter name="ws.outflow.dispatch.fault.sequence">fault</parameter>
    <parameter name="ws.use.port.offset">false</parameter>
</parameters>

Log messages

TID: [-1] [] [2018-04-24 14:25:14,675]  INFO {org.apache.synapse.mediators.builtin.LogMediator} -  To: , MessageID: urn:uuid:decebbbe-8ad7-4174-adb9-1bc324764275, Direction: request, LOGGED_MESSAGE = LOGGED, Envelope: <?xml version='1.0' encoding='utf-8'?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Body/></soapenv:Envelope> {org.apache.synapse.mediators.builtin.LogMediator}
TID: [-1] [] [2018-04-24 14:25:16,177]  WARN {org.apache.synapse.core.axis2.TimeoutHandler} -  Expiring message ID : urn:uuid:26b39fa8-9b5e-44cd-86b3-caa72c30047b; dropping message after GLOBAL_TIMEOUT of : 120 seconds for AnonymousEndpoint, URI : ws://10.100.14.8:9026/api/v2/mqtt, Received through Inbound Endpoint : testMQTT {org.apache.synapse.core.axis2.TimeoutHandler}

person Nicky    schedule 18.04.2018    source источник
comment
Привет, проверьте кодировку OutSeq.‹?xml version=1.0=UTF-8?› ‹sequence name=outDispatchSeq trace=enable xmlns=ws.apache.org/ns/synapse› ‹log level=full/›‹send/› ‹/sequence›   -  person Juan Pablo    schedule 24.04.2018
comment
@JuanPablo посредник журнала никогда не вызывался, я изменил его. Но никаких заметных изменений в логах.   -  person Nicky    schedule 24.04.2018
comment
Я вижу, как выходит сообщение журнала, поэтому вызывается последовательность вывода. Но ни один из журналов проводов не отображается. Как я могу устранить эту проблему?   -  person Nicky    schedule 24.04.2018
comment
@JuanPablo спасибо, но это дает следующую ошибку: TID: [-1] [] [2018-04-24 15:43:24,174] ОШИБКА {org.apache.axis2.description.ClientUtils} - информация об адресе не существует в ссылке на конечную точку (EPR). Система не может определить транспортный механизм. {org.apache.axis2.description.ClientUtils} TID: [-1] [] [2018-04-24 15:43:24,174] ОШИБКА {org.apache.synapse.core.axis2.Axis2Sender} — непредвиденная ошибка при отправке сообщение {org.apache.synapse.core.axis2.Axis2Sender} org.apache.axis2.AxisFault: информация об адресе отсутствует в ссылке на конечную точку (EPR).   -  person Nicky    schedule 24.04.2018
comment
Я узнал, что это работает для некоторых клиентов. Мне не хватает некоторых заголовков для других клиентов. Например, заголовок Sec-WebSocket-Protocol не возвращается. Я попытался изменить конфигурацию сквозной передачи, чтобы включить заголовок, но он удаляется, даже если я устанавливаю его вручную.   -  person Nicky    schedule 25.04.2018


Ответы (1)


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

person Nicky    schedule 30.06.2020