2016-04-05 35 views
2

MQTT protokolünde protobuf biçimini ayarlamak için nasıl Protobuf kullanarak ben mesajı yayınlamak için kod aşağıdaki uygulamıştır Protobuf aracılığıyla benim mqtt paket yapısını tanımlamak çalışıyorum

Kodu:

package com.cupola.demo; 

import org.eclipse.paho.client.mqttv3.MqttClient; 
import org.eclipse.paho.client.mqttv3.MqttConnectOptions; 
import org.eclipse.paho.client.mqttv3.MqttException; 
import org.eclipse.paho.client.mqttv3.MqttMessage; 
import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence; 

public class Publish { 

public static void main(String[] args) { 

    Sample sas = new Sample(); 
    String topic = "Cupola"; 
    String content = sas.passMessage(24,"Noor"); 
    int qos = 2; 
    String broker = "tcp://localhost:1883"; 
    String clientId = "DemoPublish"; 
    MemoryPersistence persistence = new MemoryPersistence(); 

    try { 
     MqttClient sampleClient = new MqttClient(broker, clientId, persistence); 
     MqttConnectOptions connOpts = new MqttConnectOptions(); 
     connOpts.setCleanSession(true); 
     System.out.println("Connecting to broker: " + broker); 
     sampleClient.connect(connOpts); 
     System.out.println("Connected"); 
     System.out.println("Publishing message: " + content); 
     MqttMessage message = new MqttMessage(content.getBytes()); 
     message.setQos(qos); 
     sampleClient.publish(topic, message); 
     System.out.println("Message published"); 
     sampleClient.disconnect(); 
     System.out.println("Disconnected"); 
//   System.exit(0); 
     } 
     catch (MqttException me) { 
     System.out.println("reason " + me.getReasonCode()); 
     System.out.println("msg " + me.getMessage()); 
     System.out.println("loc " + me.getLocalizedMessage()); 
     System.out.println("cause " + me.getCause()); 
     System.out.println("excep " + me); 
     me.printStackTrace(); 
    } 
} 

}

Yayıncıdan işlevi çağırmak ve değerleri

012'ye göre ayarlamak için ayarlanan değerler burada verilmiştir.

}

Bu benim Cat.proto dosyasıdır:

option java_outer_classname="CatProto"; 

message Cat { 
optional int32 age = 1; 
required string name = 2; 
} 

onu haklı veya i şeklini değiştirmek gerekir. Lütfen bana öner. Size şimdiden teşekkür ederim.

+1

Burada aslında hangi sorunu görüyorsunuz? – hardillb

+0

Bir mqtt paket niteliklerini doldurmak istiyorum ve mesaj formatı protobuf tarafından tanımlanmalıdır. Bu yüzden yukarıda bahsedilen kod, benim şartım için sorun değil veya daha fazla değişiklik yapmam gerekiyor. Hızlı yanıt için teşekkürler – Noor

+1

Hangi java protobuffer kütüphanesini kullanıyorsunuz? – hardillb

cevap

3

Eğer passMessage() yönteminde toByteArray() değil toString() kullanarak istediğiniz ardından Google Protobuff kütüphaneyi kullanarak varsayarsak.

public byte[] passMessage(int age,String name) { 

    // creating the cat 
    Cat noor= CatProto.Cat.newBuilder() 
      .setAge(age) 
      .setName(name) 
      .build(); 
    byte message[] = noor.toByteArray(); 


    return message; 
} 
+0

ve bir bayt [] mesajı olarak bildirmem gerekiyor, aksi halde bir hata ortaya çıkar ve önerileriniz için teşekkürler – Noor