#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 настроен правильно.