【发布时间】:2019-06-03 14:33:05
【问题描述】:
从 RabbitMQ 队列到 websocket 的所有通信都失败并出现错误,“WebSocket connection to 'wss://my cloudamqp instance/ws/' failed: could not decode a text frame as UTF -8 英寸。
我有一个前端,它使用 STOMP 和 websockets 和 RabbitMQ 向微服务发送请求。通信的那部分工作正常,但 MS 无法将响应发送回前端。所有尝试都会导致上述错误消息。如果我跳过 websocket 并直接从队列中读取,前端能够获得响应,但我必须为此使用 STOMP/websockets。
前端websocket声明:
var wss = new WebSocket("wss://*our cloud amqp instance*/ws/");
var client = Stomp.over(wss);
再往下:
client.subscribe('/queue/frontendResponse', onMessage);
后端将响应放置到前端响应队列中,如下所示:
channel.sendToQueue(queue, msgpack.encode(data), options);
上例中的“数据”是一个字符串化的 JSON 对象。
我认为问题不在于 STOMP,因为浏览器会在错误消息中逐行调用“var wss = new WebSocket...”(例如“Connection.js:14”)。我已经尝试对数据对象和由 msgpack.encode() 调用创建的 Buffer 对象的各个部分进行显式 UTF-8 编码,但我仍然收到相同的错误消息。 amqplib 函数 sendToQueue() 仅接受缓冲区作为第二个参数,因此尝试显式发送 UTF-8 编码字符串也不起作用。我还尝试了 StackOverflow 和其他网站的一些想法,例如转义控制字符或使用“encodeURIComponent()”。我无法摆脱此错误消息,并且无法尝试。非常感谢任何帮助;谢谢!
【问题讨论】:
-
你如何在客户端解码
msgpack? -
JSON.parse 消息体然后
msgpack.decodedata字段:var obj = JSON.parse(message.body); console.log(msgpack.decode(obj.data)); -
抱歉,一直在尝试使格式正常工作。但我想你明白了。
标签: javascript websocket rabbitmq