mica-mqtt 2.2.12 發(fā)布,簡(jiǎn)化 MqttClientTemplate 構(gòu)造,方便自定義
共 4478字,需瀏覽 9分鐘
·
2024-04-17 08:45
一、簡(jiǎn)介
mica-mqtt 基于 java aio 實(shí)現(xiàn)的簡(jiǎn)單、低延遲、高性能 的 mqtt 物聯(lián)網(wǎng)開源組件。mica-mqtt 更加易于集成到已有服務(wù)和二次開發(fā),降低自研物聯(lián)網(wǎng)平臺(tái)開發(fā)成本。
二、功能
-
支持 MQTT v3.1、v3.1.1 以及 v5.0 協(xié)議。 -
支持 websocket mqtt 子協(xié)議(支持 mqtt.js)。 -
支持 http rest api,http api 文檔詳見。 -
支持 MQTT client 客戶端。 -
支持 MQTT server 服務(wù)端。 -
支持 MQTT 遺囑消息。 -
支持 MQTT 保留消息。 -
支持自定義消息(mq)處理轉(zhuǎn)發(fā)實(shí)現(xiàn)集群。 -
MQTT 客戶端 阿里云 mqtt 連接 demo。 -
支持 GraalVM 編譯成本機(jī)可執(zhí)行程序。 -
支持 Spring boot 項(xiàng)目快速接入(mica-mqtt-spring-boot-starter)。 -
mica-mqtt-spring-boot-starter 支持對(duì)接 Prometheus + Grafana。 -
基于 redis pub/sub 實(shí)現(xiàn)集群,詳見 mica-mqtt-broker 模塊。
三、使用場(chǎng)景
-
物聯(lián)網(wǎng)(云端 mqtt broker) -
物聯(lián)網(wǎng)(邊緣端消息通信) -
群組類 IM -
消息推送 -
簡(jiǎn)單、易用的 mqtt client 客戶端
四、更新記錄
v2.2.12 - 2024-04-16
-
? mica-mqtt-client-spring-boot-starter 簡(jiǎn)化 MqttClientTemplate 構(gòu)造,方便自定義。 -
? mica-mqtt-client-spring-boot-starter 優(yōu)化 spring event mqtt client 連接監(jiān)聽。 -
? mica-mqtt-client-spring-boot-starter 優(yōu)化注解訂閱。 -
?? mqtt-client 修復(fù) mqtt5 props 和遺囑同時(shí)配置時(shí)連接編碼問題。 -
?? mica-mqtt-server 遺囑消息發(fā)送判斷(2.2.7調(diào)整引起)
五、自定義 MqttClientTemplate
在某些場(chǎng)景下我們需要啟動(dòng)多個(gè) mqtt client 來處理和轉(zhuǎn)發(fā)多個(gè) mqtt broker 間的數(shù)據(jù)。
當(dāng)然如果僅僅做數(shù)據(jù)處理和轉(zhuǎn)發(fā),建議還是直接 main 方法直接啟動(dòng) 2 個(gè) mica-mqtt client。這樣更加簡(jiǎn)潔,這樣不依賴 Spring 打包出來的 jar 才 1M 左右,啟動(dòng)飛快。
/**
* 2 個(gè) mqtt 服務(wù)間,使用 2 個(gè) client 做數(shù)據(jù)傳輸
*
* @author L.cm
*/
public class MqttClientProxy {
public static void main(String[] args) {
MqttClient client1 = MqttClient.create()
.ip("ip1")
.port(1883)
.clientId("clientI")
.username("mica")
.password("mica")
.debug()
.connectSync();
MqttClient client2 = MqttClient.create()
.ip("ip2")
.port(1883)
.clientId("client2")
.username("mica")
.password("mica")
.debug()
.connectSync();
String[] topics = new String[]{
"$share/test/link/product1/+/event/+/post",
"$share/test/link/product2/+/event/+/post",
"$share/test/link/product3/+/event/+/post"
};
client1.subscribe(topics, MqttQoS.AT_MOST_ONCE, (context, topic, message, payload) -> {
client2.publish(topic, payload);
});
}
}
自定義 MqttClientTemplate Bean:
a. 自定義 MqttClientTemplate bean 2.2.11 開始已簡(jiǎn)化,老版本建議先升級(jí)。
@Configuration
public class OtherMqttClientConfiguration {
@Bean("mqttClientTemplate1")
public MqttClientTemplate mqttClientTemplate1() {
MqttClientCreator mqttClientCreator1 = MqttClient.create()
.ip("mqtt.dreamlu.net")
.username("mica")
.password("mica");
return new MqttClientTemplate(mqttClientCreator1);
}
}
b. 修改 starter 自帶的 MqttClientTemplate Bean 引入
由于現(xiàn)在加入了一個(gè)新的名為 mqttClientTemplate1 MqttClientTemplate,老的 starter 內(nèi)置的 MqttClientTemplate 引入也需要添加 bean name。
@Autowired
@Qualifier(MqttClientTemplate.DEFAULT_CLIENT_TEMPLATE_BEAN)
private MqttClientTemplate mqttClientTemplate;
c. 新加入的 mqttClientTemplate1 MqttClientTemplate bean 引入
@Autowired
@Qualifier("mqttClientTemplate1")
private MqttClientTemplate mqttClientTemplate;
d. 新加入的 mqttClientTemplate1 注解訂閱
注意:由于 @MqttClientSubscribe clientTemplateBean 默認(rèn)是 MqttClientTemplate.DEFAULT_CLIENT_TEMPLATE_BEAN,所以新增的 mqttClientTemplate1 注解訂閱的時(shí)候也需要配置。
@MqttClientSubscribe(
value = "/#",
clientTemplateBean = "mqttClientTemplate1"
)
public void sub1(String topic, byte[] payload) {
logger.info("topic:{} payload:{}", topic, ByteBufferUtil.toString(payload));
}
