Search code examples
javamqttmosquittoemq

How can i connect a Java mqtt client with username and password to an emqttd(EMQ) broker?


I am able to subscribe to the mosquitto broker with this Java code, without username and password. Now, i would like to subscribe to an emqttd broker which requires some dummy username and password. How can i do this?. Thanks.

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");

  }

}

Solution

  • You could use the 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;
       }  
    
      }