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响应是变量消息,是方法publishNewStatus的第三个参数。

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

{"requestId":"2419399765SOL01","status":"FAILED_IN_CMBID","message":"Usuu00e1rio 2419399765 nu00e3o encontrado"}

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

我该如何解决此问题?

非常感谢。

Alfredo Oliveira

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

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

最新更新