Javascript 如何修复'';无法将文本帧解码为UTF-8。”;将RabbitMQ缓冲区发送到Websocket时?
从RabbitMQ队列到websocket的所有通信都失败,错误为“websocket连接到”wss://my cloudamqp实例/ws/“失败:无法将文本帧解码为UTF-8” 我有一个前端,它使用STOMP和WebSocket以及RabbitMQ向微服务发送请求。这部分通信正在工作,但MS无法将响应发送回前端。所有尝试都会导致上述错误消息。如果我跳过websocket并直接从队列中读取,前端可以得到响应,但是我必须使用STOMP/websocket来实现这一点 前端websocket声明:Javascript 如何修复'';无法将文本帧解码为UTF-8。”;将RabbitMQ缓冲区发送到Websocket时?,javascript,websocket,rabbitmq,Javascript,Websocket,Rabbitmq,从RabbitMQ队列到websocket的所有通信都失败,错误为“websocket连接到”wss://my cloudamqp实例/ws/“失败:无法将文本帧解码为UTF-8” 我有一个前端,它使用STOMP和WebSocket以及RabbitMQ向微服务发送请求。这部分通信正在工作,但MS无法将响应发送回前端。所有尝试都会导致上述错误消息。如果我跳过websocket并直接从队列中读取,前端可以得到响应,但是我必须使用STOMP/websocket来实现这一点 前端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()调用创建的缓冲区对象的各个部分进行显式UTF-8编码,但仍然得到相同的错误消息。amqplib函数sendToQueue()只接受缓冲区作为第二个参数,因此尝试显式发送UTF-8编码的字符串也不起作用。我还尝试了StackOverflow和其他站点的一些想法,比如转义控制字符或使用“encodeURIComponent()”。我无法摆脱此错误消息,无法尝试。非常感谢任何帮助;谢谢 好吧,我回答了我自己的问题。我读了一篇回复,其中建议JSON.stringify足以创建Websocket协议可接受的对象。然后我用它创建了一个缓冲区。因此,后端代码更改为:
channel.sendToQueue(queue, Buffer.from(JSON.stringify(msgpack.encode(data))), options);
前端有一个可以使用的对象。好吧,我回答了我自己的问题。我读了一篇回复,其中建议JSON.stringify足以创建Websocket协议可接受的对象。然后我用它创建了一个缓冲区。因此,后端代码更改为:
channel.sendToQueue(queue, Buffer.from(JSON.stringify(msgpack.encode(data))), options);
前端得到一个可以使用的对象。如何在客户端上解码
msgpack
?JSON.parse消息体,然后解码msgpack.decode
数据字段:var obj=JSON.parse(message.body);日志(msgpack.decode(obj.data));抱歉,我一直在尝试设置格式。但是我想你明白了。你如何在客户端上解码msgpack
?JSON.parse消息体,然后解码msgpack.decode
data字段:var obj=JSON.parse(message.body);日志(msgpack.decode(obj.data));抱歉,我一直在尝试设置格式。但我想你明白了。