RabbitMQPython端發(fā)送消息給Java端出現(xiàn)全數(shù)字問題怎么解決

本篇內(nèi)容主要講解“RabbitMQ Python端發(fā)送消息給Java端出現(xiàn)全數(shù)字問題怎么解決”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學(xué)習(xí)“RabbitMQ Python端發(fā)送消息給Java端出現(xiàn)全數(shù)字問題怎么解決”吧!

創(chuàng)新互聯(lián)是專業(yè)的懷化網(wǎng)站建設(shè)公司,懷化接單;提供成都網(wǎng)站設(shè)計、成都做網(wǎng)站,網(wǎng)頁設(shè)計,網(wǎng)站設(shè)計,建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進行懷化網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團隊,希望更多企業(yè)前來合作!

RabbitMQ接受一堆數(shù)字Bug

Python發(fā)送端用 pika 發(fā)送消息

發(fā)送代碼是這樣的:

#!/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端得到的結(jié)果是這樣的:

71,71,32,110,101,120,116

結(jié)果全是 ASCII碼了!之前用Java集成了 RabbitMQ,Java和Java之間是沒有這個問題的。于是想到在Java端把 ASCII 碼轉(zhuǎn)換為字符串,就寫了下面的代碼:

@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;}

得到的結(jié)果正常了:

GG next

正有點開心之際,想到一個問題,中文字符怎么辦?一個漢字兩個字節(jié),ASCII碼可表示不了?。?/p>

于是試驗一下Python端發(fā)送

msg = 'GG 下一把'

Java端果然出問題了:

GG ¦??¦?????

這時我們可以看看 RabbitMQ 給我發(fā)送過來的到底是啥,Java端代碼變成這樣:

@RabbitListener(queues = "test queue")public void process2(Object message) {
   
   
   System.out.println(message);}

Python發(fā)送端發(fā)來的是這樣的:

(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發(fā)送端發(fā)來的是這樣的:

(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[] 數(shù)組一個是 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端發(fā)來的,都能正確顯示了。

GG 下一把

到此,相信大家對“RabbitMQ Python端發(fā)送消息給Java端出現(xiàn)全數(shù)字問題怎么解決”有了更深的了解,不妨來實際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進入相關(guān)頻道進行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

網(wǎng)站題目:RabbitMQPython端發(fā)送消息給Java端出現(xiàn)全數(shù)字問題怎么解決
轉(zhuǎn)載源于:http://www.muchs.cn/article24/piehce.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供關(guān)鍵詞優(yōu)化、微信公眾號、建站公司、外貿(mào)網(wǎng)站建設(shè)網(wǎng)站內(nèi)鏈Google

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

搜索引擎優(yōu)化