資料排序
透過在欄位中從裝置串流資料,事件與訂閱可用於企業邏輯、資料處理等。透過訂閱處理的資料會擷取到支援的資料庫。ThingWorx 中的資料處理會同時執行,以支援許多物件與相關聯的內容值。
當將資料串流傳送到 ThingWorx 並透過事件與訂閱處理時,針對內容上的事件進行連續處理時,預期會使用已排序資料。已處理的資料也應以連續順序在資料庫中擷取。
問題陳述
如果遺失資料順序,會影響事件產生、訂閱,以及最終的資料擷取。在高可用性設定 (存在用來平衡 WebSocket 連線的「連線伺服器」) 中,在 Kepware 中斷連線與重新連線期間,可以發現此情況。
解決方案
在 ThingWorx 9.6 中,引入了下列變更:
1. 針對「連線伺服器」,維持特定物件與 ThingWorx ID 和 websocket (WS) 通道 ID 對之間的黏性。這可確保特定物件的內容值更新始終傳送至特定 ThingWorx 與特定 WebSocket 通道。
2. eMessage Connector(eMC) 在內部使用「連線伺服器」與 ThingWorx Platform 通訊。連線伺服器的變更可協助 eMessage Connector(eMC) 將排序的資料傳送至 ThingWorx。
3. 在 ThingWorx Platform 上,針對每個物件實行 Akka actor。透過物件的每個傳入內容值,會建立一個 actor,並將內容值推送至 Actor 的信箱。然後,Akka actor 會從佇列中提取訊息並依序處理這些訊息,以確保在平台端處理已排序的資料。
4. 會顯示一個新旗標來在 platform-settings.jsonBasicSettings 中啟用資料排序。
設定
類型
預設值
EnableDataOrdering
BOOLEAN
true false
false
* 
事件排序是 9.5 所提供的一個功能。欲在訂閱定義中開啟此組態,請按一下 Execute Events Sequentially
其他元件影響
Java 與 C SDK 可以使用下列 API 將內容值傳送至 ThingWorx:
VirtualThing.setProperty()
VirtualThing.updateSubscribedProperties();
使用之前的 API,會依序將內容傳送至 ThingWorx Platform。
為了實現資料排序,如果「連線伺服器」位於負載平衡器之後,請調整負載平衡器組態,使之具有黏性。若無此資料,就無法實現排序。
這是否有幫助?