千家信息网

RabbitMQ Python端发送消息给Java端出现全数字问题怎么解决

发表于:2025-02-07 作者:千家信息网编辑
千家信息网最后更新 2025年02月07日,本篇内容主要讲解"RabbitMQ Python端发送消息给Java端出现全数字问题怎么解决",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"RabbitMQ
千家信息网最后更新 2025年02月07日RabbitMQ Python端发送消息给Java端出现全数字问题怎么解决

本篇内容主要讲解"RabbitMQ Python端发送消息给Java端出现全数字问题怎么解决",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"RabbitMQ Python端发送消息给Java端出现全数字问题怎么解决"吧!

RabbitMQ接受一堆数字Bug

Python发送端用 pika 发送消息

发送代码是这样的:

#!/usr/bin/python# -*- coding:utf-8 -*-import pikaimport jsoncredentials = 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.bootspring-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 下一把

到此,相信大家对"RabbitMQ Python端发送消息给Java端出现全数字问题怎么解决"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

问题 代码 数字 消息 结果 内容 字符 怎么办 学习 实用 更深 两个 之间 之际 兴趣 字符串 字节 实用性 实际 操作简单 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 电脑如何反向代理服务器ip 新一代软件开发设施标准 db2数据库脚本链接数据库 华为服务器故障码UC2 捷顺收费电脑数据库工作原理 建立数据库连接出错 论文数据库范式怎么写 您的手机已连接到服务器上 Mcq数据库安全 第四届互联网会黑科技 网络安全风险防范方法 逃离塔科夫芬兰服务器叫什么 东城网络安全认证 内蒙古圣怡互联网科技有限公司 2008数据库怎么看实例名 互联网科技风向标 湖南学生少儿编程软件开发 数据库中表的用处 软件开发合同范本doc 商标信息检测软件开发的目的 db2数据库死锁怎么解锁 信息网络安全监察专业大学 杭州侣程网络技术有限公司好吗 软件开发有哪些网站可以发布信息 佳云科技深耕互联网 计算机网络技术职业目标评估 如何搞好网络安全文章 奉贤区工商软件开发销售价格 四川服务器阵列卡驱动服务器 广电传媒网络技术员
0