Весь обмен данными из очереди RabbitMQ с веб-сокетом завершается с ошибкой «Ошибка подключения WebSocket к 'wss: // мой экземпляр cloudamqp / ws /»: не удалось декодировать текстовый фрейм как UTF- 8" .
У меня есть интерфейс, который использует STOMP с веб-сокетами и RabbitMQ для отправки запросов в микросервис. Эта часть связи работает, но MS не может отправлять ответы обратно во внешний интерфейс. Все попытки приводят к приведенному выше сообщению об ошибке. Внешний интерфейс может получать ответы, если я пропускаю веб-сокет и читаю из очереди напрямую, но для этого мне нужно использовать STOMP / веб-сокеты.
Объявление интерфейсной веб-розетки:
var wss = new WebSocket("wss://*our cloud amqp instance*/ws/");
var client = Stomp.over(wss);
и далее вниз:
client.subscribe('/queue/frontendResponse', onMessage);
Серверная часть помещает ответ в очередь frontendResponse следующим образом:
channel.sendToQueue(queue, msgpack.encode(data), options);
«Данные» в приведенном выше примере - это строковый объект JSON.
Я не думаю, что проблема связана с STOMP, так как браузер вызывает строку «var wss = new WebSocket ...» по порядку номеров в сообщении об ошибке (например, «Connection.js: 14»). Я пробовал расширенную UTF-8 кодировку различных частей объекта данных и объекта Buffer, созданного вызовом msgpack.encode (), но я все еще получаю то же сообщение об ошибке. Функция amqplib sendToQueue () принимает только буфер в качестве второго аргумента, поэтому попытка явной отправки строки в кодировке UTF-8 также не работает. Я также попробовал несколько идей из StackOverflow и других сайтов, таких как экранирование управляющих символов или использование «encodeURIComponent ()». Я не могу избавиться от этого сообщения об ошибке, и я не могу попробовать. Любая помощь очень ценится; спасибо!