温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

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

发布时间:2021-12-08 09:58:12 来源:亿速云 阅读:123 作者:iii 栏目:大数据

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

RabbitMQ接受一堆数字Bug

Python发送端用 pika 发送消息

发送代码是这样的:

#!/usr/bin/python# -*- coding:utf-8 -*-import pikaimport 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 的包:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId></dependency>

接收代码是这样的:

@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端出现全数字问题怎么解决”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI