emqx ブローカーでさまざまなトピックのメッセージを発行しようとしていました。1 つのクライアントで動的トピックを発行するとシナリオに時間がかかり、トピック名を静的にすると時間が大幅に短縮されます。
ここに、同じ結果とコードを投稿しました。
Eclipse paho クライアント バージョン 3 および Qos レベル 1 で EMQX ブローカーを使用しています。
100 個の単純なパブリッシュ メッセージを使用したさまざまなトピックの時間 (ここでは id を動的と見なします):
合計時間パターン 1: /config/{id}/outward::36 秒 ------------------> HERE TOPIC は DYNAMIC です。{id} は、以下のコードに示すようにループ内で値が変化する変数です
合計時間パターン 2: /config/test::1.2 秒 -----------------------> HERE TOPIC is 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));
}
}