日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

tt协议号服务器,TTIot: TTIoT云端物联网Iot组件;面向JAVA;netty;mqtt;异步推送;以事件为驱动;为设备提供安全可靠的连接通信能力;...

發布時間:2025/3/12 编程问答 22 豆豆

TTIoT云端物聯網組件;面向JAVA;以事件為驅動;為設備提供安全可靠的連接通信能力

TTIoT簡介

TTIOT的Broker采用MQTT協議與設備進行交互,可以應用在數據采集、能源監控、智能生活、智能工業、農業水利等場景;

向下提供連接海量設備服務,支撐設備數據采集上云,支持M2M;無侵入集成第三方服務端,提供事件API,實現遠程控制設備;此外,TTIOT將會持續開源物聯網套件,如多協議引擎、設備管理、規則引擎、數據分析等插件為各類IoT場景和行業開發者賦能。

Broker組件,TTIot把TCP/IP協議族上的協議都轉換成了事件池,開發者只需要面向事件編程即可。

2.1版本重要更新

增加SSL加密功能,同時支持https\wss\tls協議

在配置文件添加

ssl:

enabled: true

certificateType: PKCS12

certificatePath: /Users/shijun/Desktop/TTIOT/ca/server/3938.pfx

certificatePassword: 5J7HDiJM

2.0版本重要更新

多協議轉換引擎-一個端口支持三種協議HTTP/WEBSOCKET/TCP,上層協議使用的依然是MQTT,支持使用這三種不同協議的客戶端相互通信(詳見使用說明.10)

使用HTTP協議向設備投遞消息,URI:/mqtt,請求體如下:

Headers:userName //設備帳號

tenantId //租戶編號

password //設備密碼

Body:

{

"mqttQos": 1, //消息質量

"payload": { //消息體

"rule": "chat",

"content": "hello"

},

"retain": false, //是否為retain消息

"topic": "/m" //推送的話題

}

支持消息路由引擎@Ruler-給消息定義規則(詳見使用說明.12)

功能

認證授權(auth)

TTIoT的容器對發布的事件都會自動檢查登陸狀態,對未授權的設備進行自動攔截,只要在相關的類添加@Eventor(auth = true)即可

@Eventor(value = AppProtocalMqttConstant.PINGREQ,auth = true)

public class MqttPingEvent extends MqttApplicationEvent {

public MqttPingEvent(MqttMessage msg, ChannelHandlerContext context) {

super(msg, context);

}

}

多租戶(saas)

TTIot的設備歸屬為租戶,其devName與topic對每個租戶唯一,clientId構成為:tenantId-devName-xxxx(保留字段);并且提供接口將設備進行錄入,例如

dbHelper.saveTenant(tenant);

dbHelper.saveDev(device);

控制反轉(IOC)

TTOT放棄第三方框架IOC框架,內部維護了一個輕量的容器,在項目啟動時對所有的Listener掃描并且接管

消息的訂閱與發布(Qos)

(1)支持Qos(Quality of Service)

TTIot提供mqtt三種消息質量模型即:

Qos0:最多一次的傳輸

Qos1:至少一次的傳輸

Qos2:只有一次的傳輸

該方案適應任何網絡場景,特別是網絡較差的場景

(2)通配符與消息降級

TTIot提供主題層級分隔符/,單層通配符+,多層通配符#,設備實現靈活訂閱

心跳檢測(Idle)

TTIot 提供兩種測活機制

(1)服務端定義

TTiot:

heartbeatTimeout: 10

(2)客戶端通過設置可變頭里面的keepAliveTimeSeconds定義

保留消息與消息遺囑

(1)Topic只有唯一的retain消息,Broker會保存每個Topic的最后一條retain消息;每個Client訂閱Topic后會立即讀取到retain消息,不必要等待發送。訂閱Topic時可以使用通配符,就會收到匹配的每個Topic的retain消息;發布消息時把retain設置為true,即為保留信息。

(2)MQTT本身就是為信號不穩定的網絡設計的,所以難免一些客戶端會無故的和Broker斷開連接;當客戶端連接到Broker時,可以指定LWT,Broker會定期檢測客戶端是否有異常;當客戶端異常掉線時,Broker就往連接時指定的topic里推送當時指定的LWT消息。

使用說明

配置文件

配置文件延續了yaml風格,默認命名為TTIotBootstrap.yml,在自己模塊resources目錄下添加TTIotBootstrap.yml文件即可

TTiot:

port: 8726 #端口

heartbeatTimeout: 10 #心跳間隔時間

netty:

bossGroupCount: -1 #-1代表線程數量取決于cpu

workerGroupCount: -1 #-1代表線程數量取決于cpu,此參數決定了netty的worker線程與TTIot內置的核心線程

redis: #redis相關

項目啟動

new ServerLauncher().launch();

自定義數據源

(1) 實現DbHelper接口

(2) 添加數據源插件,Broker提供默認的redis實現

new ServerLauncher().dbHelper(new RedisDbHelper(new RedisSourceProvider())).launch();

自定義統一異常處理器

(1) 繼承ExceptionHandlerAdapter,或者實現 Thread.UncaughtExceptionHandler 接口

(2) 添加異常處理插件,Broker提供默認的ExceptionHandlerAdapter實現

new ServerLauncher().exceptionHandler(new ExceptionHandlerDemo()).launch();

依賴注入

由于Listener是由TTIot接管的,在Listener內部系統提供了兩種級別的注入方式,選擇需要注入的對象添加@Inject注解即可

(1)service 注入

@Listener(asynchronous = true)

public class LoginLogListener extends MqttApplicationListener {

@Inject

private SessionService sessionService;

}

(20 dao 注入

public class DeviceService{

@Inject

private DbHelper dbHelper;

}

自定義消息處理器

TTIot 提供@Listener 注解來處理具體的事件信息,在@Listener里面有兩個參數

replace 為true時,替換該事件的默認處理器,為false時,對該事件新增一個處理器

asynchronous 為true時,申明該處理器為一個異步處理器,由TTIot內置的線程池進行接管,線程池大小由TTiot:netty:bossGroupCount 決定,為false時,由netty 的EventLoopGroup 接管;

處理器可以用來實現額外的功能,并且跟默認業務解耦,例如,異步的設備登陸日志

@Listener(asynchronous = true)

public class LoginLogListener extends MqttApplicationListener {

@Override

public void onApplicationEvent(MqttConnectEvent mqttConnectEvent) {

DbDemo.saveLogin(mqttConnectEvent.getTimestamp(), mqttConnectEvent.getDevName(), mqttConnectEvent.getTenantId());

}

}

無侵入設計

如果開發者想自定義事件的默認處理邏輯,無需修改源碼,只需要加上如下注解上即可,TTot則會更換默認的處理邏輯,開發者也可以利用TTot的事件驅動,自定義事件

@Listener(replace = true)

事件發布

TTIot 提供多種默認的事件供開發者使用,給topic推送消息,例如

Context.me().publishEvent(new MqttPublishTopicEvent(String topic,MqttQoS mqttQoS,byte[] bytes,String tenantId,boolean isRetain);

例如,給device單獨推送消息

Context.me().publishEvent(new MqttPublishDevEvent(String clientId, String topic, byte[] byteBuf, MqttQoS qoS,String tenantId);

docker-compose

首先,需要安裝git與docker

git clone https://gitee.com/cloudSj/TTIot.git

cd 到項目根目錄

mvn clean install

mvn clean install package -Dmaven.test.skip

docker-compose up -d

webSocket接入

TTIOT內置了webSocket協議轉換器,開發者只需要關注業務邏輯,無需關注協議處理、轉換層面的相關問題。

HTTP接入及設備控制

TTIOT目前只接受POST類型的請求,格式如下:

URI:/mqtt

Headers:userName //設備帳號

tenantId //租戶編號

password //設備密碼

Body:

{

"mqttQos": 1, //消息質量

"payload": { //消息體

"rule": "chat",

"content": "hello"

},

"retain": false, //是否為retain消息

"topic": "/m" //推送的話題

}

HTTP由于協議本身的特性只支持QOS類型為1或2

規則路由@Ruler

如果消息的內容符合

{

"rule": "chat",

"content": "hello"

}

消息格式,TTIOT將自動觸發規則路由器,將消息自動投遞到與rule值對應的處理器上如:

@Ruler(name = "chat")

public class ChatRuleHandler implements RuleHandler {

@Override

public void handler(MqttPayloadVo mqttPayloadVo) {

System.out.println(mqttPayloadVo);

}

}

因此,開發者可以自定義業務處理邏輯

TTIoT 開源計劃

docker部署組件

HTTP組件以及控制設備HTTPAPI

物模型組件

網關\集群與分布式擴展組件

安卓端組件

規則引擎組件(后續將會持續更新)

SSL加密傳輸

另外:作者誠邀開發人員提交下位機例如PLC/單片機/安卓相關代碼,如有計劃者可以通過郵箱跟作者取得聯系

聯系作者

關注公眾號:(不定期推送關于IoT的干貨以及源碼解析)

感謝:lombok、netty、hutool 提供的工具以及源碼

參與貢獻

Fork項目到自己的repo

clone到本地

修改代碼(dev分支)

commit后push到自己的庫(dev分支)

pull request

等待作者合并

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的tt协议号服务器,TTIot: TTIoT云端物联网Iot组件;面向JAVA;netty;mqtt;异步推送;以事件为驱动;为设备提供安全可靠的连接通信能力;...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。