Java mqtt中包含多个主题的一个代理url
我有两个主题和一个代理URL。我需要使用一个代理URL发布到这两个主题 我使用了一个代理URL和一个主题。然后我尝试处理两个主题,并为每个主题编写两个订户类,但当我运行两个订户类时,其中一个将显示连接丢失。 建议一些好的例子来做这件事 MQTTPublisher.javaJava 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
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中的一个示例来做这件事