首页 > 解决方案 > RabbitMQ 在我的队列中写入错误的字符

问题描述

我正在尝试使用 grails 3.3.11 在 RabbitMQ 中发布消息。但是我遇到了巴西葡萄牙语字符的麻烦。

这似乎是字符集的问题,但我不知道如何解决它。如果有人知道,请帮助我。

处理队列中的消息后,我的代码在另一个队列中发布状态。问题是我发布了一条消息,但是当我在RabbitMQ中查看时,消息被错误的字符修改。特别适用于 à、ç、õ、ú 等巴西葡萄牙语字符。

那是我的队列发布代码,问题发生的地方。

def publishNewStatus(String solicId, String newStatus, String message){
    rabbitMessagePublisher.send {
        exchange = "plt.cmbsolic.requests.status"
        body = [requestId:solicId,status:newStatus,message:message]
    }
}

这是发布的控制台结果。请注意,它是正确的。

QUEUE CONSUMING        => STARTED AT Thu May 13 17:58:49 BRT 2021
SOLICITATION ID STATUS => Status FAILED_IN_CMBID for solicitation 2419399765SOL01 
API RESPONSE           => Usuário 2419399765 não encontrado
QUEUE CONSUMING        => FINISHED AT Thu May 13 17:58:49 BRT 2021

API 响应是变量 message,方法 publishNewStatus 的第三个参数。

但是如果我去队列,那就是存储在那里的消息。

{"requestId":"2419399765SOL01","status":"FAILED_IN_CMBID","message":"Usu\u00e1rio 2419399765 n\u00e3o encontrado"}

请注意,á 被 \u00e1 替换,ã 被 \u00e3 替换。

我该如何解决这个问题?

非常感谢。

阿尔弗雷多·奥利维拉

标签: grailsrabbitmq

解决方案


我在这里复制@andrewjames 的观察。由于这不是问题,因此我可以注意到这一点。所以,这就是解决方案。

不是答案 - 只是观察:消息仍然是有效的 JSON。\u00e1 字符串是 JSON 存储 Unicode 转义字符的方式。因此,例如,您的 á 由该序列表示。因此,消息不仅有效,而且等同于您的原始文本。此 JSON 的任何使用者本身都应使用 JSON 库,该库应正确处理这些转义序列 - 例如,如果需要解析 JSON 并且需要向用户显示其文本。– 安德鲁詹姆斯 5 月 13 日 22:01


推荐阅读