您好,登錄后才能下訂單哦!
本篇內容主要講解“RabbitMQ Python端發送消息給Java端出現全數字問題怎么解決”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“RabbitMQ Python端發送消息給Java端出現全數字問題怎么解決”吧!
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端出現全數字問題怎么解決”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。