Поврежденная полезная нагрузка, отправляющая сообщение Protobuff с помощью MQTT

#python #java #mqtt #mosquitto #spring-messaging

#питон #Ява #mqtt #комаров #весенние сообщения

Вопрос:

У меня есть симулятор устройства, написанный на python, который отправлял сообщения Protobuff с помощью клиента mqtt paho. Проблема возникает, когда я получаю эти сообщения от другого клиента, написанного на Java(также eclipse paho). Полезная нагрузка, которую я получаю, кажется, повреждена. Я предполагаю, что брокер (mosquitto) пытается декодировать сообщение, и это не удается, потому что это сообщение protobuff. Я также пытался использовать RabbitMQ с плагином mqtt, и это работает, но я не могу использовать rabbit по другим причинам. У кого-нибудь была подобная проблема или вы знаете, как ее решить?

Отправленная полезная нагрузка:

 b'ngt;nx0cx08xedxd8xb8x8dx06x10xb8x80x98xb7x03x12x0cxxxxxx82?x1fnx06329.00x12x06135.00x1ax06242.00"x0530.70n0nx0cx08xedxd8xb8x8dx06x10xb8xf7x9axb7x03x12x0cxxxxxxcagt;x11x08,x12x071875.44x1ax040.00nlt;nx0cx08xedxd8xb8x8dx06x10xd8x90x9dxb7x03x12x0cxxxxxxf2gt;x1dnx0538.00x12x0515.00x1ax06242.00"x0560.00n,nx0cx08xedxd8xb8x8dx06x10xc0x9bx9cxb7x03x12x0xxxxxxfagt;rnx0539.00x12x040.00n(nx0cx08xedxd8xb8x8dx06x10xd8x8dx9exb7x03x12x0cxxxxxx8a?tnx072614.00' en  

Полученная полезная нагрузка:

 gt; �ظ��ž�xxxxx�? 329.00135.00242.00"30.70 0 �ظ�����xxxxx�gt;,1875.440.00 lt; �ظ�Є��xxxxx�gt; 42.0017.00242.00"59.90 , �ظ�����xxxxx�gt; 42.000.00 ( �ظ��ꣲxxxxx�?  2610.00  

Я использую весенние сообщения для получения сообщений:

 @Bean  @ServiceActivator(inputChannel = "mqttInputChannel")  public MessageHandler messageHandler() {  var converter = new TelemetryConverter();  return new MessageHandler() {  @Override  public void handleMessage(Messagelt;?gt; message) throws MessagingException {  SmartMessageConverter messageConverter = new ByteArrayMessageConverter();  messageConverter.fromMessage(message,String.class);  log.info(String.format("Received message: %s",message.getPayload()));  try {  MeasurementProto.Measurement.parseFrom((ByteBuffer) message.getPayload());  } catch (InvalidProtocolBufferException e) {  e.printStackTrace();  }  process.handle(converter.fromMessage(message));  }  };  }  

Комментарии:

1. Если бы я просил незнакомых людей помочь с этой проблемой, я думаю, что поделился бы кодом отправки, а также кодом получения. Кроме того, MQTT не зависит от полезной нагрузки, которую он несет. Он не будет пытаться расшифровать его — полезная нагрузка-это просто массив байтов. Возможно, вам нужно сериализовать и десериализовать все, что вы пытаетесь передать?

2. Также то, что вы опубликовали — вы выводите отправленную полезную нагрузку в виде шестнадцатеричного кода. Вы выводите полученную полезную нагрузку в двоичном виде. Конечно, они выглядят по-другому.

3. Плагин RabbitMQ MQTT поддерживает только MQTT v3. Убедитесь, что ваш Mosquitto настроен правильно.