我发送以下消息与内容类型application/json:
但是,当我从同一个RabbitMQ Web控制台获取消息时,它会将有效负载显示为String.
我究竟做错了什么?或者我从根本上误解了,Payload总是String类型?
Rak*_*Haq 10
从NodeJS上下文:
如果我们想将 JSON 对象作为消息发送,我们可能会收到以下错误:
第一个参数必须是字符串类型或 Buffer、ArrayBuffer 或 Array 的实例或类似 Array 的对象。接收到一个 Object 实例
因此,我们可以将 JSON 有效负载转换为字符串并在工作程序中对其进行解析。我们在将数据发送到队列之前对 JSON 对象进行字符串化 -
let payloadAsString = JSON.stringify(payload);
从 worker 端,我们可以 JSON.parse
let payload = JSON.parse(msg.content.toString());
//then access the object as we normally do, i.e. :
let id = payload.id;
Run Code Online (Sandbox Code Playgroud)
对于任何使用 .Net 通过 RabbitMQ 发送对象的人。
您必须将 JSON 对象序列化为字节数组,通过 RabbitMQ 发送,然后在接收后反序列化。你可以这样做:
安装 Newtonsoft JSON 库
using Newtonsoft.Json;
Run Code Online (Sandbox Code Playgroud)
为您的 JSON 对象消息创建模型(在本例中为 AccountMessage)
将您的对象序列化为字节数组,如下所示:
byte[] messagebuffer = Encoding.Default.GetBytes(JsonConvert.SerializeObject(accountMessage) );
Run Code Online (Sandbox Code Playgroud)
收到消息数据后,可以这样反序列化:
AccountMessage receivedMessage = JsonConvert.DeserializeObject<AccountMessage>(Encoding.UTF8.GetString(body));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10969 次 |
| 最近记录: |