Java mqtt中包含多个主题的一个代理url

Java mqtt中包含多个主题的一个代理url,java,mqtt,Java,Mqtt,我有两个主题和一个代理URL。我需要使用一个代理URL发布到这两个主题 我使用了一个代理URL和一个主题。然后我尝试处理两个主题,并为每个主题编写两个订户类,但当我运行两个订户类时,其中一个将显示连接丢失。 建议一些好的例子来做这件事 MQTTPublisher.java import java.io.BufferedReader; import java.io.InputStreamReader; import org.eclipse.paho.client.mqttv3.MqttClien

我有两个主题和一个代理URL。我需要使用一个代理URL发布到这两个主题

我使用了一个代理URL和一个主题。然后我尝试处理两个主题,并为每个主题编写两个订户类,但当我运行两个订户类时,其中一个将显示连接丢失。 建议一些好的例子来做这件事

MQTTPublisher.java

import java.io.BufferedReader;
import java.io.InputStreamReader;

import org.eclipse.paho.client.mqttv3.MqttClient;
import org.eclipse.paho.client.mqttv3.MqttClientPersistence;
import org.eclipse.paho.client.mqttv3.MqttDefaultFilePersistence;
import org.eclipse.paho.client.mqttv3.MqttException;
import org.eclipse.paho.client.mqttv3.MqttMessage;
import org.eclipse.paho.client.mqttv3.MqttTopic;

public class MQTTPublisher {


static final String BROKER_URL = "tcp://localhost:1883";// public mosquitto
                                                        // server
static final String TOPIC = "iotm/ej";// Change according to your
                                            // application
static final String TOPIC1 = "iotm/stream1";

public static void main(String args[]) {

    try {
        // Creating new default persistence for mqtt client
        MqttClientPersistence persistence = new MqttDefaultFilePersistence(
                "/tmp");

        // mqtt client with specific url and client id
        MqttClient client1 = new MqttClient(BROKER_URL, "Publisher-ID",
                persistence);

        client.connect();

        MqttTopic myTopic = client1.getTopic(TOPIC);
        MqttTopic myTopic1 = client1.getTopic(TOPIC1);
        String msg = "AMMA!DEVI!dURGA";
         System.out.println("Enter the message to publish,Type quit to exit\n");
         BufferedReader br = new BufferedReader(new
         InputStreamReader(System.in));
         msg = br.readLine();
         while (!msg.equals("quit")) {
         myTopic.publish(new MqttMessage(msg.getBytes()));
         System.out.println("Message published on" + TOPIC);
         myTopic1.publish(new MqttMessage(msg.getBytes()));

         System.out.println("Message published on" + TOPIC1);
         msg = br.readLine();
         }
        myTopic.publish(new MqttMessage(msg.getBytes()));

        myTopic1.publish(new MqttMessage(msg.getBytes()));

        // client.disconnect();
    } catch (MqttException e) {
        e.printStackTrace();
    } catch (Exception e) {
        System.err.println(e.getMessage());
    }
}
}
MQTTSubscriber.java

import org.eclipse.paho.client.mqttv3.MqttCallback;
import org.eclipse.paho.client.mqttv3.MqttClient;
import org.eclipse.paho.client.mqttv3.MqttDefaultFilePersistence;
import org.eclipse.paho.client.mqttv3.MqttDeliveryToken;
import org.eclipse.paho.client.mqttv3.MqttException;
import org.eclipse.paho.client.mqttv3.MqttMessage;
import org.eclipse.paho.client.mqttv3.MqttTopic;

public class MQTTSubscriber {

static final String BROKER_URL = "tcp://localhost:1883";// public
// mosquitto server
static final String TOPIC = "iotm/ej"; // Change according to your



public static void main(String args[]) {

    try {
        // Creating new default persistence for mqtt client
        MqttDefaultFilePersistence persistence = new MqttDefaultFilePersistence(
                "/tmp");

        // mqtt client with specific url and a random client id
        MqttClient client1 = new MqttClient(BROKER_URL, "Subscriber-ID",
                persistence);
        client1.connect();
        System.out.println("Subscribing to topic '" + TOPIC + "' from "
                + client1.getServerURI());
        // Subscribing to specific topic
        client1.subscribe(TOPIC);

        // It will trigger when a new message is arrived
        MqttCallback callback = new MqttCallback() {
            @Override
            public void messageArrived(MqttTopic arg0, MqttMessage arg1)
                    throws Exception {
                System.out.println("Message:"
                        + new String(arg1.getPayload()));

            }

            @Override
            public void deliveryComplete(MqttDeliveryToken arg0) {

            }

            @Override
            public void connectionLost(Throwable arg0) {
                System.out.println("Connection lost");
            }
        };
        // Continue waiting for messages until the Enter is pressed
        client1.setCallback(callback);
        /*
         * System.out.println("Press <Enter> to exit"); try {
         * System.in.read(); } catch (IOException e) { // If we can't read
         * we'll just exit }
         */
        // client.disconnect();
        // System.out.println("Client Disconnected");

    } catch (MqttException e) {
        e.printStackTrace();
    } catch (Exception e) {
        System.err.println(e.getMessage());
    }
}

}
import org.eclipse.paho.client.mqttv3.MqttCallback;
导入org.eclipse.paho.client.mqttv3.MqttClient;
导入org.eclipse.paho.client.mqttv3.MqttDefaultFilePersistence;
导入org.eclipse.paho.client.mqttv3.MqttDeliveryToken;
导入org.eclipse.paho.client.mqttv3.MqttException;
导入org.eclipse.paho.client.mqttv3.MqttMessage;
导入org.eclipse.paho.client.mqttv3.MqttTopic;
公共类MQTTSubscriber{
静态最终字符串BROKER_URL=”tcp://localhost:1883“;//公开
//MOSQUITO服务器
静态最终字符串TOPIC=“iotm/ej”;//根据您的
公共静态void main(字符串参数[]){
试一试{
//为mqtt客户机创建新的默认持久性
MqttDefaultFilePersistence persistence=新MqttDefaultFilePersistence(
“/tmp”);
//具有特定url和随机客户端id的mqtt客户端
MqttClient client1=新MqttClient(代理URL,“订户ID”,
持久性);
client1.connect();
System.out.println(“订阅主题”’+topic+“'from”
+client1.getServerURI());
//订阅特定主题
客户1.订阅(主题);
//它将在新消息到达时触发
MqttCallback callback=新的MqttCallback(){
@凌驾
public void messageArrived(MqttTopic arg0、MqttMessage arg1)
抛出异常{
System.out.println(“消息:
+新字符串(arg1.getPayload());
}
@凌驾
公共无效交付完成(MqttDeliveryToken arg0){
}
@凌驾
public void connectionLost(可丢弃arg0){
System.out.println(“连接丢失”);
}
};
//继续等待消息,直到按Enter键
client1.setCallback(callback);
/*
*System.out.println(“按下退出”);尝试{
*System.in.read();}catch(IOException e){//如果我们无法读取
*我们就退出}
*/
//client.disconnect();
//System.out.println(“客户端断开”);
}捕获(MqttException e){
e、 printStackTrace();
}捕获(例外e){
System.err.println(e.getMessage());
}
}
}
MQTTSubscriber2.java

import org.eclipse.paho.client.mqttv3.MqttCallback;
import org.eclipse.paho.client.mqttv3.MqttClient;
import org.eclipse.paho.client.mqttv3.MqttDefaultFilePersistence;
import org.eclipse.paho.client.mqttv3.MqttDeliveryToken;
import org.eclipse.paho.client.mqttv3.MqttException;
import org.eclipse.paho.client.mqttv3.MqttMessage;
import org.eclipse.paho.client.mqttv3.MqttTopic;

  public class MQTTSubscriber2 {


static final String BROKER_URL = "tcp://localhost:1883";// public
// mosquitto server
static final String TOPIC = "iotm/stream1"; 



public static void main(String args[]) {

    try {
        // Creating new default persistence for mqtt client
        MqttDefaultFilePersistence persistence = new MqttDefaultFilePersistence(
                "/tmp");

        // mqtt client with specific url and a random client id
        MqttClient client = new MqttClient(BROKER_URL, "Subscriber-ID",
                persistence);
        client.connect();
        System.out.println("Subscribing to topic '" + TOPIC + "' from "
                + client.getServerURI());
        // Subscribing to specific topic
        client.subscribe(TOPIC);

        // It will trigger when a new message is arrived
        MqttCallback callback = new MqttCallback() {
            @Override
            public void messageArrived(MqttTopic arg0, MqttMessage arg1)
                    throws Exception {
                System.out.println("Message:"
                        + new String(arg1.getPayload()));

            }

            @Override
            public void deliveryComplete(MqttDeliveryToken arg0) {

            }

            @Override
            public void connectionLost(Throwable arg0) {
                System.out.println("Connection lost");
            }
        };
        // Continue waiting for messages until the Enter is pressed
        client.setCallback(callback);
        /*
         * System.out.println("Press <Enter> to exit"); try {
         * System.in.read(); } catch (IOException e) { // If we can't read
         * we'll just exit }
         */
        // client.disconnect();
        // System.out.println("Client Disconnected");

    } catch (MqttException e) {
        e.printStackTrace();
    } catch (Exception e) {
        System.err.println(e.getMessage());
    }
}
import org.eclipse.paho.client.mqttv3.MqttCallback;
导入org.eclipse.paho.client.mqttv3.MqttClient;
导入org.eclipse.paho.client.mqttv3.MqttDefaultFilePersistence;
导入org.eclipse.paho.client.mqttv3.MqttDeliveryToken;
导入org.eclipse.paho.client.mqttv3.MqttException;
导入org.eclipse.paho.client.mqttv3.MqttMessage;
导入org.eclipse.paho.client.mqttv3.MqttTopic;
公共类MQTTSubscriber2{
静态最终字符串BROKER_URL=”tcp://localhost:1883“;//公开
//MOSQUITO服务器
静态最终字符串TOPIC=“iotm/stream1”;
公共静态void main(字符串参数[]){
试一试{
//为mqtt客户机创建新的默认持久性
MqttDefaultFilePersistence persistence=新MqttDefaultFilePersistence(
“/tmp”);
//具有特定url和随机客户端id的mqtt客户端
MqttClient=新MqttClient(代理URL,“订户ID”,
持久性);
client.connect();
System.out.println(“订阅主题”’+topic+“'from”
+client.getServerURI());
//订阅特定主题
client.subscribe(主题);
//它将在新消息到达时触发
MqttCallback callback=新的MqttCallback(){
@凌驾
public void messageArrived(MqttTopic arg0、MqttMessage arg1)
抛出异常{
System.out.println(“消息:
+新字符串(arg1.getPayload());
}
@凌驾
公共无效交付完成(MqttDeliveryToken arg0){
}
@凌驾
public void connectionLost(可丢弃arg0){
System.out.println(“连接丢失”);
}
};
//继续等待消息,直到按Enter键
client.setCallback(callback);
/*
*System.out.println(“按下退出”);尝试{
*System.in.read();}catch(IOException e){//如果我们无法读取
*我们就退出}
*/
//client.disconnect();
//System.out.println(“客户端断开”);
}捕获(MqttException e){
e、 printStackTrace();
}捕获(例外e){
System.err.println(e.getMessage());
}
}

}

如果您运行的是两个单独的订阅服务器代码实例,则它们都需要不同的客户端ID。如果使用同一个代理运行2,则当第二个代理连接时,第一个代理将断开与代理的连接。

能否发布一些示例代码来说明问题?也不清楚,但是您使用的是2个客户端实例吗?如果是这样,他们将需要不同的客户ids@hardillb:添加了我的示例代码。。实际上,我是mqtt新手,所以我只是根据net中的一个示例来做这件事