rabbitmq python 发送失败_RabbitMQ Python端发送消息给Java端 接受消息全数字问题

RabbitMQ接受一堆数字Bug

Python发送端用 pika 发送消息

发送代码是这样的:

#!/usr/bin/python

# -*- coding:utf-8 -*-

import pika

import json

credentials = pika.PlainCredentials('ding', 'ding')

connection = pika.BlockingConnection(pika.ConnectionParameters('192.168.0.200',5672,'/',credentials))

channel = connection.channel()

channel.queue_declare(queue='test queue')

msg = 'GG next'

channel.basic_publish(exchange='',

routing_key='test queue',

body=msg)

connection.close()

Java接收端是 Spring boot 项目,集成了 RabbitMQ 的包:

org.springframework.boot

spring-boot-starter-amqp

接收代码是这样的:

@RabbitListener(queues = "test queue")

public void process2(String message) {

System.out.println(message);

}

运行Python脚本,Java端得到的结果是这样的:

71,71,32,110,101,120,116

结果全是 ASCII码了!之前用Java集成了 RabbitMQ,Java和Java之间是没有这个问题的。于是想到在Java端把 ASCII 码转换为字符串,就写了下面的代码:

@RabbitListener(queues = "test queue")

public void process2(String message) {

System.out.println(arrayToStr(ascToArray(message)));

}

private String arrayToStr(int[] arr) {

String res = "";

for (int i = 0; i < arr.length; i++) {

res += Character.toString((char)arr[i]);

}

return res;

}

private int[] ascToArray(String str) {

String[] arr = str.split(",");

int[] resArr = new int[arr.length];

for (int i = 0; i < arr.length; i++) {

resArr[i] = Integer.parseInt(arr[i]);

}

return resArr;

}

得到的结果正常了:

GG next

正有点开心之际,想到一个问题,中文字符怎么办?一个汉字两个字节,ASCII码可表示不了啊?

于是试验一下Python端发送

msg = 'GG 下一把'

Java端果然出问题了:

GG ¦ᄌヒ¦ᄌタ₩ハハ

这时我们可以看看 RabbitMQ 给我发送过来的到底是啥,Java端代码变成这样:

@RabbitListener(queues = "test queue")

public void process2(Object message) {

System.out.println(message);

}

Python发送端发来的是这样的:

(Body:'[B@49d1204c(byte[12])' MessageProperties [headers={}, contentLength=0, redelivered=false, receivedExchange=, receivedRoutingKey=test queue, deliveryTag=1, consumerTag=amq.ctag-Q4Oy_yC5qRoLoxAdu50zaw, consumerQueue=test queue])

Java发送端发来的是这样的:

(Body:'GG 下一把' MessageProperties [headers={}, contentType=text/plain, contentEncoding=UTF-8, contentLength=0, receivedDeliveryMode=PERSISTENT, priority=0, redelivered=false, receivedExchange=, receivedRoutingKey=queue, deliveryTag=1, consumerTag=amq.ctag-o1v48tbAr8mu-pT7HZHvHA, consumerQueue=queue])

居然一个是 byte[] 数组一个是 String这可怎么办?解决代码如下:

import org.springframework.amqp.core.Message;

@RabbitListener(queues = "test queue")

public void process2(Message message) {

String messageBody = new String(message.getBody());

System.out.println(messageBody);

}

不论是Java端还是Python端发来的,都能正确显示了。

GG 下一把

参考

Python网络爬虫与推荐算法新闻推荐平台:网络爬虫:通过Python实现新浪新闻的爬取,可爬取新闻页面上的标题、文本、图片、视频链接(保留排版) 推荐算法:权重衰减+标签推荐+区域推荐+热点推荐.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值