我试图在 emqx 代理上发布不同主题的消息。场景在使用一个客户端发布动态主题时需要很多时间,如果我们将主题名称设置为静态,则需要的时间要少得多。
在这里,我发布了相同的结果和代码。
我正在使用带有 Eclipse paho 客户端版本 3 和 Qos 级别 1 的 EMQX 代理。
使用 100 条简单发布消息处理不同主题的时间(在此处将 id 视为动态):
总时间模式 1:/config/{id}/outward::36 sec -----------------> HERE TOPIC 是 DYNAMIC。{id} 是一个变量,其值在循环中发生变化,如下面的代码所示
总时间模式 2:/config/test::1.2 sec ------------------------------------> HERE TOPIC 是 STATIC
我该如何发布具有不同 ID 的消息,以便主题创建不会花费太多时间?
public class MwttPublish {
static IMqttClient instance= null;
public static IMqttClient getInstance() {
try {
if (instance == null) {
instance = new MqttClient(mqttHostUrl, "SimpleTestMQTT");
}
if (!instance.isConnected()) {
MqttConnectOptions options = new MqttConnectOptions();
options.setUserName("test");
options.setPassword("test".toCharArray());
options.setAutomaticReconnect(true);
options.setCleanSession(false);
options.setConnectionTimeout(10);
instance.connect(options);
}
} catch (final Exception e) {
System.out.println("Exception in mqtt: {}" + e.getMessage());
}
return instance;
}
public static void publishMessage() throws MqttException {
IMqttClient iMqttClient = getInstance();
MqttMessage mqttMessage = new MqttMessage("Hello".getBytes());
mqttMessage.setQos(1);
mqttMessage.setRetained(true);
System.out.println("Publish Start for pattern 1");
int i =0;
final BigDecimal mqttmsgPublishstartTime = new BigDecimal(System.currentTimeMillis());
do {
iMqttClient.publish("/config/" +i +"/outward", mqttMessage);
i++;
}while(i<100);
System.out.println("Total time pattern 1 /config/i/outward::" + (new BigDecimal(System.currentTimeMillis())).subtract(mqttmsgPublishstartTime));
System.out.println("Publish Start for pattern 2");
final BigDecimal mqttmsgPublishstartTime1 = new BigDecimal(System.currentTimeMillis());
i =0;
do {
iMqttClient.publish("/config/test", mqttMessage);
i++;
}while(i<100);
System.out.println("Total time pattern 2 /config/test::" + (new BigDecimal(System.currentTimeMillis())).subtract(mqttmsgPublishstartTime1));
}
}