RabbitMQ Python側はJava側にメッセージを送信してメッセージの全デジタル問題を受け入れる
13023 ワード
文書ディレクトリ RabbitMQ受信デジタルBug 参照 RabbitMQは数字Bugの山を受け入れた
Python送信側はpikaでメッセージを送信
送信コードは次のとおりです.
Java受信側はSpring bootプロジェクトで、RabbitMQのパッケージを統合しています.
受信コードは次のとおりです.
Pythonスクリプトを実行すると、Java側の結果は次のようになります.
結局ASCIIコードだらけ!以前はJavaでRabbitMQを統合していましたが、JavaとJavaの間にはこの問題はありません.そこでJava側でASCIIコードを文字列に変換しようと考え、次のコードを書きました.
結果は正常になりました.
ちょうど少し楽しい时、1つの问题を思いついて、中国语の文字はどのようにしますか?1つの漢字の2つのバイト、ASCIIコードは表すことができませんか?
そこでPython側の送信を試してみました
Java側はやはり問題が発生しました.
RabbitMQが送ってくれたものが何なのかを見ることができます.Java側のコードはこうなります.
Pythonの送信元からは、
Java送信側から送られてきたのは、
なんとbyte[]配列一つがStringだったのですがどうすればいいですか?解決コードは次のとおりです.
Java側でもPython側でも正しく表示されます.
リファレンス
簡書rabbitはJSONを受け入れて受け取ったのはすべて数字です
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のパッケージを統合しています.
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-amqpartifactId>
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
ちょうど少し楽しい时、1つの问题を思いついて、中国语の文字はどのようにしますか?1つの漢字の2つのバイト、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
リファレンス
簡書rabbitはJSONを受け入れて受け取ったのはすべて数字です