新四季網

一種分布式web應用與遠程設備消息通信方法

2023-07-06 16:19:01 2

專利名稱:一種分布式web應用與遠程設備消息通信方法
技術領域:
本發明屬於計算機網絡應用領域,特別是在基於Java EE技術平臺的分布式TOB 應用系統與遠程設備之間進行消息通信的方法。
背景技術:
隨著嵌入式技術與網絡技術的發展,遠程監測設備的自動化水平不斷提高,不僅可以實現無人值守的數據自動採集、自動上報,還能做到遠程控制,遠程監控在水利、氣象監測、工業數據採集與控制等領域得到了越來越廣泛的應用。傳統的與遠程設備通信的數據中心大多基於Windows平臺,有C/S和B/S兩種主要的體系結構。C/S體系結構的應用即桌面應用,將用戶交互界面、遠程設備交互界面緊密耦合在一個應用裡,通過緊耦合來實現用戶與遠程設備之間的消息傳遞,然後緊耦合的結構使得系統功能模塊劃分不清晰,不利於協同開發及系統維護與升級;B/S體系結構比C/S 體系結構的優點在於將用戶交互界面與遠程設備交互界面相對獨立起來,採用資料庫作為兩層之間的消息傳遞媒介,通過讀寫資料庫來實現雙方的命令與響應消息的傳遞,這種通信方法的缺點在於消息收發雙方依賴掃描資料庫頻率來及時獲取命令及響應數據,通信的實時性得不到保障,而且資料庫作為第三方加入到用戶與遠程設備之間的通信過程,增加了通信的不確定因素,也增加了資料庫的性能的消耗。另外,基於windows平臺的應用最大的弊端在於其只能運行在windows系統上,嚴重的限制了應用範圍。

發明內容
本發明的目的是為基於Java EE平臺的TOB應用系統和遠程設備之間設計一種命令及響應轉發的消息通信機制。它可以有效的將WEB應用系統發出的各種命令轉發給遠程設備,等待並轉發遠程設備發回的響應消息。其突出特點在於通過JMS隊列的消息轉發機制,將WEB應用系統分解為TOB用戶交互層與遠程設備交互層兩個相對獨立的、低耦合的分布式應用,實現了業務邏輯和表現層的分離。本發明的目的是通過以下技術方案實現的。本發明的一種分布式TOB應用與遠程設備消息通信方法,包括步驟
1)初始化WEB應用系統的JMS隊列、應用命令管理器、GPRS服務;
2)用戶通過TOB用戶交互層發出對遠程設備的操作命令,發起會話過程,WEB交互層採用同步的方式將該命令通過JMS隊列轉發至遠程設備交互層;同時,建立JMS臨時隊列,發送方阻塞線程,等待響應消息;
3)遠程設備交互層收到轉發的JMS消息的命令後,按照與遠程設備約定的通信協議, 將命令對象解析為字節流,並通過公共網絡發送給遠程設備;
4)遠程設備交互層在指定時間內收到響應消息,將字節流解析為響應消息對象,從命令隊列中匹配相應的命令,通過JMS臨時隊列將響應發回WEB用戶交互層,會話結束;如果超過指定時間仍未收到遠程設備的響應,則給WEB用戶交互層回送一個超時錯誤響應消息,結束會話。步驟2中,所述用戶通過TOB用戶交互層發出對遠程設備的操作命令具體包括WEB應用系統通過數據中心從JMS隊列中獲取JMS消息對象,從中提取出命令對象 COMMAND,在其中保存用於響應返回的JMS臨時隊列信息,將命令對象COMMAND放入命令池, 按照通信協議解析為字節流,通過數據中心的網絡埠 socket發送給遠程設備。步驟4中,所述通過JMS臨時隊列將響應發回WEB用戶交互層具體為通過數據中心接收遠程設備返回的響應消息字節流,將其解析為響應消息對象RESPONSE,在命令池中查找其對應的命令對象COMMAND,如找到相匹配的命令對象,從中獲取JMS臨時隊列信息, 將響應消息RESPONSE通過該JMS臨時隊列返回給WEB應用系統,進一步呈現給用戶。步驟1中,所述JMS隊列的初始化包括通過Java EE容器提供的連接工廠創建 JMS隊列,通過上下文從Java命令目錄JNDI中查找連接工廠,創建連接工廠對象之後,使用連接工廠創建連接,在此連接中創建一個會話,利用上下文在容器中通過JNDI名稱查找隊列;通過會話創建消息生產者和消息消費者;
所述應用命令管理器的初始化包括執行構造應用命令池和啟動從JMS隊列中獲取命令消息的線程操作;
所述GPRS服務的初始化包括監聽指定的埠、設置連接超時時間參數、註冊處理遠程設備登錄、數據處理、事件處理的類。在步驟2,所述W發起會話過程為WEB用戶交互層在收到用戶的指令後,將命令對象COMMAND封裝為JMS消息,所述消息由報頭和消息主體兩部分組成,報頭由路由信息以及有關該消息的元數據組成,消息主體則攜帶著應用程式的數據或有效負載。所述消息主體根據以下有效負載劃分類型簡單文本、可序列化的對象、屬性集合、字節流、原始值流,無有效負載消息。所述步驟3接收JMS消息包括創建接收方對象並指定接收消息方式是異步方式還是同步方式;以同步方式接收消息,需要手工的去得到消息,直到消息到達或在規定的時間內沒有到達而超時;以異步方式時,客戶機需要定義一個消息監聽器,當消息達到時,JMS provider通過調用該對象的onMessage方法來傳遞消息。步驟4中,所述遠程設備收到命令後,然後通過SOCKET返迴響應消息;在收到遠程設備的響應消息後,遠程設備交互層應用首先將從SOCKET收到的字節流消息按照通信協議解析為響應消息RESPONSE,然後由應用命令管理器根據響應消息RESPONSE的類型和設備ID從應用命令池中查找對應的命令COMMAND,找到以後,從應用命令池中刪除該命令 COMMAND,為響應RESPONSE設置其對應的命令COMMAND,並通過JMS臨時隊列返回給WEB用戶交互層。步驟4中,如果遠程設備在指定時間內沒有返迴響應消息,則由遠程設備交互層應用通過JMS臨時隊列向TOB用戶交互層應用發送一個命令超時的提示,並從應用命令池中清除已超時的命令對象COMMAND。本發明的優點在於JMS是Java EE技術規範的組成部分,能夠與Java EE平臺完美結合;通過請求式命令發送方式及臨時隊列,能夠為命令發送和響應接收雙方建立高效、 準確、可靠的消息通信方式;通過JMS隊列的消息機制,降低應用之間的耦合度,保證了通信的可靠性和實時性;通過應用命令管理器,保證了命令與響應之間的對應關係。


圖1為分布式TOB應用與遠程設備消息通信應用場景圖; 圖2為分布式TOB應用與遠程設備消息通信流程圖。
具體實施例方式為使本發明的目的、技術方案和優點更加清楚明白,以下結合具體實施例,對本發明進一步詳細說明。下面結合附圖對本發明的具體實施方式
作進一步詳細的描述。本發明的應用場景如圖1所示,用戶操作TOB界面,對遠程設備發出動作指令,TOB 應用以同步的方式將命令對象COMMAND封裝為JMS消息對象,發送到JMS隊列中;數據中心從JMS隊列中獲取JMS消息對象,從中提取出命令對象COMMAND,在其中保存用於響應返回的臨時隊列信息,將命令對象COMMAND放入命令池,按照通信協議解析為字節流,通過數據中心的網絡埠 socket發送給遠程設備;數據中心收到遠程設備返回的響應消息字節流後,將其解析為響應消息對象RESPONSE,在命令池中查找其對應的命令對象COMMAND,如找到相匹配的命令對象,從中獲取臨時隊列信息,將響應消息RESPONSE通過該臨時隊列返回給WEB應用,進一步呈現給用戶。圖2為本發明的應用流程。首先對WEB應用系統所需的資源進行初始化,包括JMS 隊列、應用命令管理器、GPRS服務等。JMS隊列的創建通過Java EE容器提供的連接工廠創建,通過上下文(Context)從Java命令目錄(JNDI)中查找連接工廠,創建連接工廠對象之後,使用連接工廠創建連接,在此連接中創建一個會話,與連接工廠一樣,隊列需要利用上下文在容器中通過JNDI名稱查找;通過會話創建消息生產者和消息消費者後,就可以進行消息轉發了。以下代碼可用於完成上述JMS隊列初始化
Context context = new InitialContext (properties);
QueueConnectionFactory queueConnectionFactory = (QueueConnectionFactory) context.lookup (queueConnectionFactoryName);
QueueConnection queueConnection = queueConnectionFactory. createQueueConnection ;
queueConnection. start ;
QueueSession queueSession = queueConnection. createQueueSession(transacted, acknowledgementMode);
Queue queue = (Queue)context· lookup(queueName);
應用命令管理器的主要任務是為遠程設備交互層的應用維護應用命令池及在命令池中查找匹配響應消息相應命令的操作,提供向遠程設備發送命令消息及向WEB用戶交互層的應用轉發響應消息的服務。應用命令管理器初始化要執行構造應用命令池和啟動從JMS 隊列中獲取命令消息的線程等操作。GPRS服務的主要任務是為應用提供與遠程設備之間的網絡連接,以及建立並維持雙方的數據通道。初始化時需要執行的操作有監聽指定的埠、設置連接超時時間參數、 註冊處理遠程設備登錄、數據處理、事件處理的類等。
在應用初始化完成之後,就可以開始TOB應用與遠程設備之間的會話過程。TOB 用戶交互層在收到用戶的指令後,將命令對象COMMAND封裝為JMS消息,消息是JMS中的一種類型對象,由報頭和消息主體兩部分組成。報頭由路由信息以及有關該消息的元數據組成。消息主體則攜帶著應用程式的數據或有效負載。根據有效負載的類型來劃分,可以將消息分為幾種類型,它們分別攜帶簡單文本(TextMessage)、可序列化的對象(ObjectMessage)、屬性集合(MapMessage)、字節流(BytesMessage)、原始值流 (StreamMessage),還有無有效負載的消息(Message)。然後將消息發送到目標隊列,目標隊列在JMS初始化的時候由上下文中查找獲得。消息發送有同步和異步兩種方式。同步方式發送消息後線程等待消息的回覆,異步方式則無需等待。以下代碼可以實現消息的定義及發送
QueueRequestor requestor = new QueueRequestor(queueSession, queue); ObjectMessage om = queueSession. createObjectMessage; om. setObject(command);
ObjectMessage message = (0bjectMessage)requestor, request(om); 遠程設備交互層應用是WEB應用於遠程設備會話的中間層,負責接收從WEB用戶交互層應用通過JMS轉發的消息,將其轉換為字節流,通過GPRS服務發送給遠程設備;同時,通過監聽網絡埠 SOCKET,將遠程設備的響應字節流解析為響應消息對象RESPONSE,並從應用命令管理器的應用命令池中查找響應消息對象RESPONSE的相應的命令對象COMMAND,通過臨時隊列將響應RESPONSE返回給TOB用戶應用層。要接收JMS消息,必須創建接收方對象並指定是要以異步方式還是同步方式接收消息。以同步方式(Synchronously)接收消息,需要手工的去得到消息,為了得到一個消息, 客戶機調用方法得到消息,直到消息到達或在規定的時間內沒有到達而超時。而以異步方式(Asynchronously)時,客戶機需要定義一個消息監聽器(MessageListener),當消息達到時,JMS provider通過調用該對象的onMessage方法來傳遞消息。應用命令管理器維護一個線程,用於同步接收JMS消息,以下代碼是應用命令管理器用來接收JMS消息,並獲取用於響應返回的臨時隊列信息
QueueReceiver queueReceiver = queueSession· createReceiver(queue); Message message = queueReceiver. receive(500); if (message == null)return null; ObjectMessage om = (ObjectMessage)message;
TemporaryQueue replyQueue = (TemporaryQueue)om. getJMSReplyTo; AppCommand ac = (AppCommand) om. get0bject; ac. setResponseTunnel(replyQueue);
在收到命令COMMAND後,立即將其放入應用命令池中,然後按照通信協議的規定,將其解析為字節流,並通過網絡埠 SOCKET發送給遠程設備,以下代碼可以用於通過SOCKET發送字節流內容
ByteArrayOutputStream bout = new ByteArrayOutputStream; bout.write (content);
bout. writeTo (socket. getOutputStream );遠程設備收到命令後,進行指定動作,然後通過SOCKET返迴響應消息。在收到遠程設備的響應消息後,遠程設備交互層應用首先將從SOCKET收到的字節流消息按照通信協議解析為響應消息RESPONSE,然後由應用命令管理器根據響應消息RESPONSE的類型和設備ID從應用命令池中查找對應的命令COMMAND,找到以後,從應用命令池中刪除該命令 COMMAND,為響應RESPONSE設置其對應的命令COMMAND,並通過JMS臨時隊列返回給WEB用戶交互層。以下代碼用於將響應消息RESPONSE通過JMS臨時隊列返回
TemporaryQueue replyQueue = (TemporaryQueue) crm. getCommand . getResponseTunnel;
QueueSender queueSender = queueSession. createSender(replyQueue); ObjectMessage om = queueSession. createObjectMessage; om. setOb ject (crm); queueSender. send(om);
如果遠程設備在指定時間內沒有返迴響應消息,則由遠程設備交互層應用通過JMS臨時隊列向TOB用戶交互層應用發送一個命令超時的提示,並從應用命令池中清除已超時的命令對象COMMAND。以下代碼用於回送命令超時響應
CommandFaiIMessage failMessage = new CommandFailMessage (command, 〃命令超時
「);
remoνeApρCommand (command);
commandManager. getMessageTransfer . sendCommandResponse (failMessage); 以上所述的具體實施例,對本發明的目的、技術方案和有益效果進行了進一步的詳細說明,所應理解的是,以上所述僅為本發明的具體實施例而已,並不用於限制本發明,凡在本發明的精神和原則之內,所做的任何修改、等同替換、改進等,均應包含在本發明的保護範圍之內。
權利要求
1.一種分布式WEB應用與遠程設備消息通信方法,其特徵在於包括步驟1)初始化WEB應用系統的JMS隊列、應用命令管理器、GPRS服務;2)用戶通過TOB用戶交互層發出對遠程設備的操作命令,發起會話過程,WEB交互層採用同步的方式將該命令通過JMS隊列轉發至遠程設備交互層;同時,建立JMS臨時隊列,發送方阻塞線程,等待響應消息;3)遠程設備交互層收到轉發的JMS消息的命令後,按照與遠程設備約定的通信協議, 將命令對象解析為字節流,並通過公共網絡發送給遠程設備;4)遠程設備交互層在指定時間內收到響應消息,將字節流解析為響應消息對象,從命令隊列中匹配相應的命令,通過JMS臨時隊列將響應發回WEB用戶交互層,會話結束;如果超過指定時間仍未收到遠程設備的響應,則給WEB用戶交互層回送一個超時錯誤響應消息,結束會話ο
2.根據權利要求1所述的方法,其特徵在於,步驟2中,所述用戶通過TOB用戶交互層發出對遠程設備的操作命令具體包括WEB應用系統通過數據中心從JMS隊列中獲取JMS 消息對象,從中提取出命令對象COMMAND,在其中保存用於響應返回的JMS臨時隊列信息, 將命令對象COMMAND放入命令池,按照通信協議解析為字節流,通過數據中心的網絡埠 socket發送給遠程設備。
3.根據權利要求1所述的方法,其特徵在於,步驟4中,所述通過JMS臨時隊列將響應發回WEB用戶交互層具體為通過數據中心接收遠程設備返回的響應消息字節流,將其解析為響應消息對象RESPONSE,在命令池中查找其對應的命令對象COMMAND,如找到相匹配的命令對象,從中獲取JMS臨時隊列信息,將響應消息RESPONSE通過該JMS臨時隊列返回給WEB應用系統,進一步呈現給用戶。
4.根據權利要求1所述的方法,其特徵在於,步驟1中,所述JMS隊列的初始化包括 通過Java EE容器提供的連接工廠創建JMS隊列,通過上下文從Java命令目錄JNDI中查找連接工廠,創建連接工廠對象之後,使用連接工廠創建連接,在此連接中創建一個會話, 利用上下文在容器中通過JNDI名稱查找隊列;通過會話創建消息生產者和消息消費者;所述應用命令管理器的初始化包括執行構造應用命令池和啟動從JMS隊列中獲取命令消息的線程操作;所述GPRS服務的初始化包括監聽指定的埠、設置連接超時時間參數、註冊處理遠程設備登錄、數據處理、事件處理的類。
5.根據權利要求1所述的方法,其特徵在於,在步驟2,所述發起會話過程為TOB用戶交互層在收到用戶的指令後,將命令對象COMMAND封裝為JMS消息,所述消息由報頭和消息主體兩部分組成,報頭由路由信息以及有關該消息的元數據組成,消息主體則攜帶著應用程式的數據或有效負載。
6.根據權利要求5所述的方法,其特徵在於,步驟4中,所述遠程設備收到命令後,然後通過SOCKET返迴響應消息;在收到遠程設備的響應消息後,遠程設備交互層應用首先將從 SOCKET收到的字節流消息按照通信協議解析為響應消息RESPONSE,然後由應用命令管理器根據響應消息RESPONSE的類型和設備ID從應用命令池中查找對應的命令COMMAND,找到以後,從應用命令池中刪除該命令COMMAND,為響應RESPONSE設置其對應的命令COMMAND, 並通過JMS臨時隊列返回給WEB用戶交互層。
7.根據權利要求5所述的方法,其特徵在於,步驟4中,如果遠程設備在指定時間內沒有返迴響應消息,則由遠程設備交互層應用通過JMS臨時隊列向TOB用戶交互層應用發送一個命令超時的提示,並從應用命令池中清除已超時的命令對象COMMAND。
全文摘要
本發明是一種分布式WEB應用與遠程設備消息通信方法,步驟為1)初始化WEB應用系統的JMS隊列、應用命令管理器、GPRS服務;2)用戶通過WEB用戶交互層發出對遠程設備的操作命令,發起會話過程,建立JMS臨時隊列;3)遠程設備交互層收到轉發的JMS消息的命令,按照約定的通信協議,將命令對象解析為字節流,通過公共網絡發送給遠程設備;4)遠程設備交互層在指定時間內收到響應消息,將字節流解析為響應消息對象,從命令隊列中匹配相應的命令,通過JMS臨時隊列將響應發回WEB用戶交互層。本發明能夠為命令發送和響應接收雙方建立高效、準確、可靠的消息通信方式,降低應用之間的耦合度,保證了通信的可靠性和實時性。
文檔編號H04L12/56GK102404404SQ20111038575
公開日2012年4月4日 申請日期2011年11月28日 優先權日2011年9月7日
發明者倪娜, 楊方廷, 塗穎, 譚越, 趙龍軍 申請人:航天科工仿真技術有限責任公司

同类文章

一種新型多功能組合攝影箱的製作方法

一種新型多功能組合攝影箱的製作方法【專利摘要】本實用新型公開了一種新型多功能組合攝影箱,包括敞開式箱體和前攝影蓋,在箱體頂部設有移動式光源盒,在箱體底部設有LED脫影板,LED脫影板放置在底板上;移動式光源盒包括上蓋,上蓋內設有光源,上蓋部設有磨沙透光片,磨沙透光片將光源封閉在上蓋內;所述LED脫影

壓縮模式圖樣重疊檢測方法與裝置與流程

本發明涉及通信領域,特別涉及一種壓縮模式圖樣重疊檢測方法與裝置。背景技術:在寬帶碼分多址(WCDMA,WidebandCodeDivisionMultipleAccess)系統頻分復用(FDD,FrequencyDivisionDuplex)模式下,為了進行異頻硬切換、FDD到時分復用(TDD,Ti

個性化檯曆的製作方法

專利名稱::個性化檯曆的製作方法技術領域::本實用新型涉及一種檯曆,尤其涉及一種既顯示月曆、又能插入照片的個性化檯曆,屬於生活文化藝術用品領域。背景技術::公知的立式檯曆每頁皆由月曆和畫面兩部分構成,這兩部分都是事先印刷好,固定而不能更換的。畫面或為風景,或為模特、明星。功能單一局限性較大。特別是畫

一種實現縮放的視頻解碼方法

專利名稱:一種實現縮放的視頻解碼方法技術領域:本發明涉及視頻信號處理領域,特別是一種實現縮放的視頻解碼方法。背景技術: Mpeg標準是由運動圖像專家組(Moving Picture Expert Group,MPEG)開發的用於視頻和音頻壓縮的一系列演進的標準。按照Mpeg標準,視頻圖像壓縮編碼後包

基於加熱模壓的纖維增強PBT複合材料成型工藝的製作方法

本發明涉及一種基於加熱模壓的纖維增強pbt複合材料成型工藝。背景技術:熱塑性複合材料與傳統熱固性複合材料相比其具有較好的韌性和抗衝擊性能,此外其還具有可回收利用等優點。熱塑性塑料在液態時流動能力差,使得其與纖維結合浸潤困難。環狀對苯二甲酸丁二醇酯(cbt)是一種環狀預聚物,該材料力學性能差不適合做纖

一種pe滾塑儲槽的製作方法

專利名稱:一種pe滾塑儲槽的製作方法技術領域:一種PE滾塑儲槽一、 技術領域 本實用新型涉及一種PE滾塑儲槽,主要用於化工、染料、醫藥、農藥、冶金、稀土、機械、電子、電力、環保、紡織、釀造、釀造、食品、給水、排水等行業儲存液體使用。二、 背景技術 目前,化工液體耐腐蝕貯運設備,普遍使用傳統的玻璃鋼容

釘的製作方法

專利名稱:釘的製作方法技術領域:本實用新型涉及一種釘,尤其涉及一種可提供方便拔除的鐵(鋼)釘。背景技術:考慮到廢木材回收後再加工利用作業的方便性與安全性,根據環保規定,廢木材的回收是必須將釘於廢木材上的鐵(鋼)釘拔除。如圖1、圖2所示,目前用以釘入木材的鐵(鋼)釘10主要是在一釘體11的一端形成一尖

直流氧噴裝置的製作方法

專利名稱:直流氧噴裝置的製作方法技術領域:本實用新型涉及ー種醫療器械,具體地說是ー種直流氧噴裝置。背景技術:臨床上的放療過程極易造成患者的局部皮膚損傷和炎症,被稱為「放射性皮炎」。目前對於放射性皮炎的主要治療措施是塗抹藥膏,而放射性皮炎患者多伴有局部疼痛,對於止痛,多是通過ロ服或靜脈注射進行止痛治療

新型熱網閥門操作手輪的製作方法

專利名稱:新型熱網閥門操作手輪的製作方法技術領域:新型熱網閥門操作手輪技術領域:本實用新型涉及一種新型熱網閥門操作手輪,屬於機械領域。背景技術::閥門作為流體控制裝置應用廣泛,手輪傳動的閥門使用比例佔90%以上。國家標準中提及手輪所起作用為傳動功能,不作為閥門的運輸、起吊裝置,不承受軸向力。現有閥門

用來自動讀取管狀容器所載識別碼的裝置的製作方法

專利名稱:用來自動讀取管狀容器所載識別碼的裝置的製作方法背景技術:1-本發明所屬領域本發明涉及一種用來自動讀取管狀容器所載識別碼的裝置,其中的管狀容器被放在循環於配送鏈上的文檔匣或託架裝置中。本發明特別適用於,然而並非僅僅專用於,對引入自動分析系統的血液樣本試管之類的自動識別。本發明還涉及專為實現讀