亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

顺昌县| 大同县| 佛教| 象州县| 浙江省| 高青县| 大邑县| 新津县| 广州市| 那曲县| 长春市| 阳原县| 多伦县| 武川县| 裕民县| 巴青县| 新干县| 葫芦岛市| 左贡县| 新民市| 阳山县| 平遥县| 兴文县| 临朐县| 京山县| 多伦县| 嘉义市| 丰镇市| 穆棱市| 花垣县| 滨海县| 大宁县| 杂多县| 渝中区| 郴州市| 江源县| 伽师县| 龙山县| 镇宁| 广丰县| 曲阳县|