Protobuf Java método parseFrom () se bloquea cuando la recepción de mensajes de servidor MQTT

Joss-ENET:

Actualmente estoy tratando de publicar y recibir mensajes a través de un protobuf mosquitto MQQT servidor. Estoy con éxito la publicación de la adecuada al servidor. Sin embargo, cuando un cliente lo recibe, el método parseFrom () se bloquea y nunca regresa. Este es un tema muy similar a éste , que ocurren cuando un mensaje se envía Protobuf a través de un zócalo que nunca se cerró.

Editor :

MqttClient adapterClient = new MqttClient(broker, clientID);
SpecsMessage.Specs protoNotifyMessage = SpecsMessage.Specs.newBuilder()
                    .setNodeType("basic")
                    .setAddress(serverSocket.getInetAddress().getHostName())
                    .setPort(serverSocket.getLocalPort())
                    .build();
MqttMessage notifyMessage = new MqttMessage(protoNotifyMessage.toString().getBytes());
adapterClient.publish("availableNodes", notifyMessage);

Abonado:

public class TestController implements MqttCallback {
  public void messageArrived(String topic, MqttMessage message){
                System.out.println("New node connected");     
                System.out.println("Payload: \n" + new String(message.getPayload()));                           
                SpecsMessage.Specs protoMessage = SpecsMessage.Specs.parseFrom(message.getPayload());
  }
}

No pude encontrar una manera de especificar a la MQQT servidor de una manera correcta para enviar el mensaje.

También he intentado usar el método writeDelimitedFrom ().

MqttClient adapterClient = new MqttClient(broker, clientID);
SpecsMessage.Specs protoNotifyMessage = SpecsMessage.Specs.newBuilder()
                    .setNodeType("basic")
                    .setAddress(serverSocket.getInetAddress().getHostName())
                    .setPort(serverSocket.getLocalPort())
                    .build();
ByteArrayOutputStream output = new ByteArrayOutputStream();
protoNotifyMessage.writeDelimitedTo(output);
MqttMessage notifyMessage = new MqttMessage(output.toByteArray());
adapterClient.publish("availableNodes", notifyMessage);

Sin embargo, el mensaje no se convierte correctamente en el byte [], esto es lo que debe ser similar:

nodeType: "basic"
address: "0.0.0.0"
port: 43101

Y esto es lo que me sale:

basic0.0.0.0��

¿Hay una manera de hacer este trabajo, ya sea mediante la corrección del método de envío o resolviendo el byte [] problema de la conversión?

Andy Turner:

Usted está tratando de utilizar parseFrompara analizar el proto con formato de texto. parseFromes para analizar el formato de alambre.

Enviar el proto en el formato de alambre en su lugar - message.toByteArray().

(Si se desea analizar desde el formato de texto, use TextFormat).

Supongo que te gusta

Origin http://10.200.1.11:23101/article/api/json?id=389577&siteId=1
Recomendado
Clasificación