RabbitMQ 在我的队列中写入了错误的字符

RabbitMQ writes wrong characters in my queue

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

好像是charset的问题,不知道怎么解决。有知道的请帮帮我

处理队列中的消息后,我的代码在另一个队列中发布状态。问题是我发布了一条消息,但是当我在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 response 是变量 message,方法 publishNewStatus 的第三个参数。

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

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

注意á被\u00e1代替,ã被\u00e3代替。

我该如何解决这个问题?

非常感谢。

阿尔弗雷多·奥利维拉

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

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