Java接收Python发送的RabbitMQ消息全是byte数组
最近遇到一个好玩的bug,主要源自于对pika的不了解,业务场景是这样的:在构建应用时,需要使用sonarqube进行静态扫描,并且需要将扫描结果反馈到构建服务中,因为SonarQube扫描任务使用的Sonar-Scanner脚本进行操作的,CI服务分散在二十多台机器上,主要的架构图是这样的:
pika代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| auth = pika.PlainCredentials(mq_username, mq_password)
connection = pika.BlockingConnection( pika.ConnectionParameters(mq_host, mq_port, mq_virtual_host, auth, heartbeat=9999) )
channel = connection.channel()
channel.basic_publish( exchange=mq_ack_exchange, routing_key=mq_ack_routing_key, body=json.dumps(json_body), properties=pika.BasicProperties( delivery_mode=2, ) )
|
java代码
1 2 3 4
| @RabbitListener(queues = "#{'${external.mq.queue.deploy}'}") public void process(@Payload String message) { System.out.println(message); }
|
这里输出的内容变成了ASCII码12 34 56 87
,然后报错了,思前想后,也到mq控制台检查了,消息报文正常,然后心想用new String()转一下呢?辗转反侧,最后的解决方案是:
1 2 3 4 5 6
| import org.springframework.amqp.core.Message;
@RabbitListener(queues = "#{'${external.mq.queue.deploy}'}") public void process(@Payload Message message) { System.out.println(new String(message.getBody())); }
|
注意Message类不要import错了。