Тайм-аут подключения с использованием nodejs Stompit при подключении к activemq artemis

Я подключаюсь к своему брокеру ActiveMQ Artemis и не вижу ошибок при вызове подключения. Через некоторое время (через несколько минут) я вижу ошибку тайм-аута подключения.

Кроме того, я не вижу создаваемой очереди (только адреса), и сообщение не отображается на консоли Artemis.

введите здесь описание изображения

Консоль ActiveMQ Artemis:

введите здесь описание изображения

Код:

const stompConnectOptions= {
    'host': 'localhost',
    'port': 61613,
    'connectHeaders': {
        'host': '/', 'login': 'admin', 'passcode': 'xxxx', 'heart-beat': '1000,1000'
    }
};

const stompit=require ('stompit') const subscribeHeaders= {
    'destination': 'emailEvent', 'ack': 'client-individual'
};

const sendHeaders= {
    'destination': '/queue/TestEvent', 'content-type': 'text/plain'
};

stompit.connect(stompConnectOptions, (err, client)=> {
    if (err) {
        console.log("error with stomp connection.");
        return;
    }
    console.log("stomp connected") stompClient=client;
    const frame=client.send(sendHeaders);
    frame.write('hello');
    frame.end();
    console.log('hello message sent')
});

Журналы сервера ActiveMQ:

введите здесь описание изображения

2020-01-29 23:33:46,333 WARN  [org.apache.activemq.artemis.core.protocol.stomp] AMQ332069: Sent ERROR frame to STOMP client /127.0.0.1:52170: null
2020-01-29 23:33:46,334 WARN  [org.apache.activemq.artemis.core.server] AMQ222067: Connection failure has been detected: null [code=REMOTE_DISCONNECT]
2020-01-29 23:33:46,335 WARN  [org.apache.activemq.artemis.core.server] AMQ222061: Client connection failed, clearing up resources for session 21617631-4319-11ea-a1bd-24a2e1f3b27a
2020-01-29 23:33:46,337 WARN  [org.apache.activemq.artemis.core.server] AMQ222107: Cleared up resources for session 21617631-4319-11ea-a1bd-24a2e1f3b27a

Я новичок в стомпите.


person javapedia.net    schedule 30.01.2020    source источник


Ответы (1)


Здесь может оказаться полезной документация ActiveMQ Artemis STOMP.

Первое, что я рекомендую, - это включить ведение журнала отладки. В документации говорится:

Входящие и исходящие кадры STOMP могут регистрироваться путем включения DEBUG для org.apache.activemq.artemis.core.protocol.stomp.StompConnection. Это может быть чрезвычайно полезно для отладки или просто мониторинга активности клиентов. Наряду с самим кадром STOMP регистрируется удаленный IP-адрес клиента, а также идентификатор внутреннего соединения, чтобы кадры от одного и того же клиента могли быть коррелированы.

Вы можете включить это ведение журнала, изменив etc/logging.properties.

Сначала добавьте это в список loggers, разделенных запятыми, в начале файла:

org.apache.activemq.artemis.core.protocol.stomp.StompConnection

Во-вторых, добавьте новую строку под комментарием ActiveMQ Artemis logger levels:

logger.org.apache.activemq.artemis.core.protocol.stomp.StompConnection.level=DEBUG

После того, как вы включили ведение журнала, это должно помочь вам понять, почему соединение закрывается. Я предполагаю, что клиент не отправляет правильные кадры с бьющимся сердцем. В этом случае вы можете попробовать подключиться без пульса, например:

const stompConnectOptions= {
    'host': 'localhost',
    'port': 61613,
    'connectHeaders': {
        'host': '/', 'login': 'admin', 'passcode': 'xxxx', 'heart-beat': '0,0'
    }
};

Документация также должна помочь объяснить, почему создается только адрес, а не очередь. В разделе «Отправка» документации указано:

Когда клиент STOMP отправляет сообщение (используя кадр SEND), диспетчер протокола просматривает сообщение, чтобы определить, куда его направить и, возможно, как создать адрес и / или очередь, в которую оно отправляется. Диспетчер протокола использует любой из следующих битов информации из кадра для определения типа маршрутизации:

  1. Значение заголовка destination-type. Допустимые значения: ANYCAST и MULTICAST (с учетом регистра).

  2. «Префикс» в заголовке destination. См. дополнительные информация о префиксах.

Если указание типа маршрутизации не предоставлено, то будет использоваться значение по умолчанию, определенное в соответствующих default-address-routing-type & default-queue-routing-type настройках адреса.

Заголовок destination отображается на адрес с тем же именем. Если заголовок destination использует префикс, он удаляется.

Когда вы отправляете свое сообщение, брокер использует тип маршрутизации MULTICAST, что означает, что он будет автоматически создавать только адрес, а не очередь. Это поведение по умолчанию.

Как указано в документации, у вас есть 3 основных варианта для решения этой проблемы ...

Один, вы можете отправить заголовок destination-type, например:

const sendHeaders= {
    'destination': '/queue/TestEvent', 'content-type': 'text/plain', 'destination-type': 'ANYCAST'
};

Два, вы можете настроить префикс на STOMP acceptor, как это сделано в пример" stamp-jms ", поставляемого с брокером, например:

<acceptor name="stomp">tcp://0.0.0.0:61613?anycastPrefix=/queue/</acceptor>

Три, вы можете изменить типы маршрутизации по умолчанию в настройках адреса, например:

<address-setting match="#">
   ...
   <default-address-routing-type>ANYCAST</default-address-routing-type>
   <default-queue-routing-type>ANYCAST</default-queue-routing-type>
   ...
</address-setting>

Конечно, использование match # изменит значение по умолчанию для каждого адреса и очереди, поэтому вы можете настроить это для своих конкретных нужд.

person Justin Bertram    schedule 30.01.2020
comment
спасибо за ваш пост, он помог мне понять и исправить, почему очередь не создает проблему. Проблема с подключением больше не возникает, не знаю, как она решена. продолжу проверять спасибо - person javapedia.net; 31.01.2020
comment
подключен не удалось только сейчас. - person javapedia.net; 31.01.2020
comment
2020-01-30 19: 54: 24,734 ОТЛАДКА [org.apache.activemq.artemis.core.protocol.stomp.StompConnection] STOMP (/192.168.0.10:50538, b5d4fe43): OUT ›› StompFrame [command = ERROR, headers = {message = null}, content = null, bytes = null 2020-01-30 19: 54: 24,738 WARN [org.apache.activemq.artemis.core.protocol.stomp] AMQ332069: отправлено фрейм ERROR клиенту STOMP /192.168 .0.10: 50538: null 2020-01-30 19: 54: 24,739 WARN [org.apache.activemq.artemis.core.server] AMQ222067: обнаружен сбой подключения: null [code = REMOTE_DISCONNECT] - person javapedia.net; 31.01.2020
comment
Вы все еще общаетесь с 'heart-beat': '1000,1000'? Кроме того, вам нужно будет предоставить журналы отладки за все время, когда соединение Stomp было активным, чтобы я мог видеть, что происходило. На этом этапе я подозреваю, что клиент закрывает свое соединение, не отправляя DISCONNECT фрейм. - person Justin Bertram; 31.01.2020
comment
все еще с биением сердца: 1000. - person javapedia.net; 31.01.2020