Python STOMP 客户端收到不完整的二进制消息

问题描述 投票:0回答:1

我正在尝试在两个 Python STOMP 客户端之间交换二进制消息。

消息发送和接收没有问题。然而,接收器上总是丢失一些字节(似乎是随机的)。

C++ 客户端接收到的消息全部相同。发送 ASCII 文本时也没有问题。

我错过了什么?

  • Python:3.10
  • 践踏:7.0.0
  • ActiveMQ:5.16.3

出版商:

import random
import string
import time 
import sys
import stomp
import os

hosts = [('localhost', 61613)]
conn = stomp.Connection(host_and_ports=hosts)
conn.connect('admin', 'admin', wait=True)
while 1:
    b = bytes(os.urandom(100))
    #b = ''.join(random.choices(string.ascii_lowercase, k=1500))
    print(len(b))
    conn.send(content_lengh=len(b), body=b, destination='/queue/test')
    time.sleep(2)
    
conn.disconnect()

订阅者:

import time
import sys
import stomp

class MyListener(stomp.ConnectionListener):
    def on_error(self, frame):
        print('received an error "%s"' % frame.body)

    def on_message(self, frame):
        print(type(frame.body))
        print('received message len = "%s"' % len(frame.body))

conn = stomp.Connection()
conn.set_listener('', MyListener())
conn.connect('admin', 'password', wait=True)
conn.subscribe(destination='/queue/test', id=1, ack='auto')

print("Waiting for messages...")
while 1: 
  time.sleep(10)
conn.disconnect()
python binary stomp
1个回答
0
投票

我自己通过追踪 STOMP 发现了这一点。订阅者需要禁用自动解码,如下所示。否则,帧体将被解码为 UTF-8。

conn = stomp.Connection(auto_decode=False)
© www.soinside.com 2019 - 2024. All rights reserved.