【问题标题】:How can i connect a Java mqtt client with username and password to an emqttd(EMQ) broker?如何将带有用户名和密码的 Java mqtt 客户端连接到 emqttd(EMQ) 代理?
【发布时间】:2018-08-01 06:43:20
【问题描述】:

我可以使用这个 Java 代码订阅 mosquitto 代理,无需用户名和密码。现在,我想订阅一个需要一些虚拟用户名和密码的 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");

  }

}

【问题讨论】:

  • 正如 Eirini Graonidou 所说,您可以使用MqttConnectOptions 使用用户名/密码进行身份验证。如果您想完全摆脱用户名/密码身份验证,您可能希望考虑证书身份验证:hivemq.com/blog/…

标签: java mqtt mosquitto emq


【解决方案1】:

你可以使用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;
   }  

  }

【讨论】:

    【解决方案2】:

    这是我最后的工作代码:

    没有这条线, 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;
        }
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-24
      • 2021-09-22
      • 1970-01-01
      • 1970-01-01
      • 2018-12-29
      相关资源
      最近更新 更多