Как я могу подключить Java-клиент mqtt с именем пользователя и паролем к брокеру emqttd (EMQ)?

Я могу подписаться на брокера mosquitto с этим кодом Java, без имени пользователя и пароля. Теперь я хотел бы подписаться на брокера emqttd, для которого требуется фиктивное имя пользователя и пароль. Как я могу это сделать?. Спасибо.

http://tgrall.github.io/blog/2017/01/02/getting-started-with-mqtt/#disqus_thread

https://github.com/emqtt/emqttd

package com.mapr.demo.mqtt.simple;

import org.eclipse.paho.client.mqttv3.MqttClient;
import org.eclipse.paho.client.mqttv3.MqttException;

public class Subscriber {

  public static void main(String[] args) throws MqttException {

    System.out.println("== START SUBSCRIBER ==");

    MqttClient client=new MqttClient("tcp://localhost:1883", MqttClient.generateClientId());
    client.setCallback( new SimpleMqttCallBack() );
    client.connect();

    client.subscribe("iot_data");

  }

}

person R.Alamsha    schedule 01.08.2018    source источник
comment
Как сказал Эйрини Граониду, вы можете аутентифицироваться с помощью имени пользователя и пароля, используя MqttConnectOptions. Если вы хотите полностью отказаться от аутентификации по имени пользователя и паролю, вы можете рассмотреть возможность аутентификации с помощью сертификата: hivemq.com/blog/   -  person paulsm4    schedule 01.08.2018


Ответы (2)


Вы можете использовать MqttConnectOptions :

 public class Subscriber {

    private static final String CONNECTION_URL = "tcp://localhost:1883";
    private static final String SUBSCRIPTION = "iot_data";
    private static final String USERNAME = "username";
    private static final String PASSWORD = "top-secret";


    public static void main(String[] args) throws MqttException {

       System.out.println("== START SUBSCRIBER ==");

       MqttClient client = new MqttClient(CONNECTION_URL, 
       MqttClient.generateClientId());

       MqttConnectOptions connOpts = setUpConnectionOptions(USERNAME, PASSWORD);
       client.connect(connOpts);

       client.subscribe(SUBSCRIPTION);

    }

   private static MqttConnectOptions setUpConnectionOptions(String username, String password) {
       MqttConnectOptions connOpts = new MqttConnectOptions();
       connOpts.setCleanSession(true);
       connOpts.setUserName(username);
       connOpts.setPassword(password.toCharArray());
       return connOpts;
   }  

  }
person Eirini Graonidou    schedule 01.08.2018

Это мой последний рабочий код:

Без этой строки client.setCallback(new SimpleMqttCallBack()); я не могу распечатать сообщение. Не уверен, почему?

package com.mapr.demo.mqtt.simple;

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;

public class Subscriber {

//    private static final String CONNECTION_URL = "tcp://localhost:1883";
    private static final String CONNECTION_URL = "tcp://192.168.1.102:1883";
    private static final String SUBSCRIPTION = "Area1/#";
    private static final String USERNAME = "username";
    private static final String PASSWORD = "top-secret";

    public static void main(String[] args) throws MqttException {

    System.out.println("== START SUBSCRIBER ==");

    MqttClient client = new MqttClient(CONNECTION_URL, MqttClient.generateClientId());

    MqttConnectOptions connOpts = setUpConnectionOptions(USERNAME, PASSWORD);

// This callback is required to receive the message
    client.setCallback(new SimpleMqttCallBack());
    client.connect(connOpts);

    client.subscribe(SUBSCRIPTION);
    }

    public void messageArrived(String topic, MqttMessage message) throws MqttException {
    System.out.println(String.format("[%s] %s", topic, new String(message.getPayload())));
    System.out.println("\tMessage published on topic 'Area1'");
    }

    private static MqttConnectOptions setUpConnectionOptions(String username, String password) {
    MqttConnectOptions connOpts = new MqttConnectOptions();
    connOpts.setCleanSession(true);
    connOpts.setUserName(username);
    connOpts.setPassword(password.toCharArray());
    return connOpts;
    }

}
person R.Alamsha    schedule 01.08.2018