国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于Spring Integration消息流程的文件監(jiān)控*

2013-09-11 07:21丁振凡
關(guān)鍵詞:適配器郵件消息

丁振凡

(華東交通大學(xué)信息工程學(xué)院,江西南昌 330013)

基于Spring Integration消息流程的文件監(jiān)控*

丁振凡

(華東交通大學(xué)信息工程學(xué)院,江西南昌 330013)

Spring Integration提供一種簡(jiǎn)單、高效的機(jī)制實(shí)現(xiàn)面向消息的應(yīng)用集成,并采用聲明式配置定義消息通道與消息處理部件的聯(lián)系,SpringSource Tool Suite提供可視化工具箱實(shí)現(xiàn)消息處理流程的編排.結(jié)合某目錄下文件安全檢查的應(yīng)用實(shí)例,給出Spring Integration的具體編程處理方法,通過(guò)消息文件存儲(chǔ)某目錄下所有文件的狀態(tài)信息.待檢測(cè)時(shí)將目錄下文件的信息與消息文件記錄的信息進(jìn)行比較,從而發(fā)現(xiàn)文件的變化并作相應(yīng)處理,通過(guò)自動(dòng)發(fā)送郵件通知管理者.

spring integration;消息;消息通道;消息處理部件;文件變化監(jiān)控

近年來(lái),面向服務(wù)的體系結(jié)構(gòu)(SOA)成為應(yīng)用集成的主流,而面向消息數(shù)據(jù)交換是SOA應(yīng)用的主要特征[1].基于消息的數(shù)據(jù)交換實(shí)現(xiàn)發(fā)送者和接收者之間的耦合,有利于增量式開(kāi)發(fā)應(yīng)用.Spring Integration是Spring的一個(gè)擴(kuò)展框架,在繼承了Spring的IOC機(jī)制的基礎(chǔ)上,提供了一個(gè)輕量級(jí)的、聲明式模型,從而實(shí)現(xiàn)面向消息的應(yīng)用,支持消息驅(qū)動(dòng)和事件驅(qū)動(dòng)機(jī)制[2],并通過(guò)適配器連接各類消息源(如File,JMS,JDBC,HTTP等),實(shí)現(xiàn)與外部系統(tǒng)集成.筆者在Spring Integration基礎(chǔ)知識(shí)體系的基礎(chǔ)上,結(jié)合服務(wù)器的文件監(jiān)控應(yīng)用提出了具體編程處理方法.

1 Spring integration消息處理

1.1消息的構(gòu)建

消息(Message)提供了對(duì)Java對(duì)象及元數(shù)據(jù)的一個(gè)通用包裝機(jī)制,包括header(消息頭)和payload(消息負(fù)載),通過(guò)Message接口的getHeaders()方法可得到消息頭,通過(guò)getPayload()可得到消息負(fù)載.

構(gòu)建消息有2種方式:一種使用消息接口的實(shí)現(xiàn)類GenericMessage〈T〉構(gòu)建,消息負(fù)載可以是任何可持久化的Java對(duì)象,以下為含消息頭參數(shù)的構(gòu)造方法具體格式為GenericMessage〈T〉(T payload,Map〈String,Objec〉t headers);

另一種使用MessageBuilder工具類,創(chuàng)建1個(gè)字符串消息為

Message〈String〉m=MessageBuilder.withPayload("hello").build();

1.2消息通道

消息通道(MessageChannel)是傳送消息的部件[3],接口定義了發(fā)送消息的send方法,MessageChannel接口有2個(gè)子接口:一個(gè)是PollableChannel接口,用來(lái)接收消息,可緩存消息,其中含接收消息的receive()方法;另一個(gè)是SubscribableChannel接口,用于發(fā)布/訂閱形式的消息通信,無(wú)需緩存,其中含支持消息的訂閱/取消的subscribe和unsubscribe方法.按消息遞交處理方式,消息通道可分為點(diǎn)對(duì)點(diǎn)通道和發(fā)布/訂閱形式通道2大類.

1.2.1點(diǎn)對(duì)點(diǎn)形式通道 點(diǎn)對(duì)點(diǎn)通道只有 1個(gè)接收者,包括直接通道(DirectChannel)、隊(duì)列通道(QueueChannel)、優(yōu)先級(jí)通道(PriorityChannel)等.隊(duì)列通道支持消息緩沖隊(duì)列,按FIFO規(guī)則處理消息,而優(yōu)先級(jí)通道允許指定消息的優(yōu)先順序.最簡(jiǎn)單的直接通道的定義形式為〈int:channel id="identification "/〉 .

1.2.2發(fā)布/訂閱形式通道 發(fā)布訂閱形式通道(PublishSubscribeChannel)用于發(fā)布/訂閱模式的通信,發(fā)布者通過(guò)該通道廣播消息,所有訂閱者將接收到消息.任何訂閱者必須是1個(gè)MessageHandler類型的對(duì)象,其中含有handleMessage方法實(shí)現(xiàn)消息處理邏輯.發(fā)布訂閱形式通道的定義形式為〈int:publish-subscribe-channel id="pubsub-channel"/〉 .

1.3消息處理端點(diǎn)

圖1 典型消息處理部件的處理邏輯

Spring integration的消息處理部件(Message Endpoint)實(shí)現(xiàn)功能服務(wù)與消息框架的連接,用于對(duì)消息進(jìn)行加工處理,圖1給出了典型消息處理部件的邏輯處理過(guò)程.消息處理部件通常包括輸入通道、輸出通道和業(yè)務(wù)處理服務(wù)邏輯.其處理過(guò)程為:(1)從輸入通道獲取消息;(2)消息處理部件調(diào)用業(yè)務(wù)邏輯,此時(shí)消息內(nèi)容將傳遞給業(yè)務(wù)邏輯的方法參數(shù);(3)返回業(yè)務(wù)邏輯的執(zhí)行結(jié)果給消息處理部件;(4)將結(jié)果包裝為消息送輸出通道.

有的Endpoint還可以配置poller屬性,用來(lái)引進(jìn)事務(wù)、觸發(fā)器、定時(shí)器等相關(guān)邏輯[4-5].表1給出了主要消息處理端點(diǎn)的功能,綜合運(yùn)用這些部件可實(shí)現(xiàn)功能強(qiáng)大的應(yīng)用.

表1 主要消息處理端點(diǎn)的功能

2 面向消息處理流程的文件監(jiān)控

檢查某目錄下文件的安全由2步構(gòu)成:將某目錄下所有文件的狀態(tài)信息通過(guò)消息存儲(chǔ)保存到消息文件中;在安全檢查時(shí)將消息文件中的信息讀取,與當(dāng)前文件的狀態(tài)信息進(jìn)行比較,從而發(fā)現(xiàn)變化的文件.該應(yīng)用除需要引入Spring框架的jar包和spring-integration的jar包外,因任務(wù)定時(shí)需要,還要引入面向切面編程的依賴包aopalliance.jar.為實(shí)現(xiàn)Java對(duì)象到Json串轉(zhuǎn)換,應(yīng)用采用了Google的gson工具,要引入Google的gson-1.7.1.jar包.

2.1目錄下原始文件狀況的登記

2.1.1對(duì)文件記錄信息的包裝 文件登記中記錄的不是文件對(duì)象,而是文件的部分信息,為此專門(mén)定義一個(gè)FileInfo類實(shí)現(xiàn)對(duì)文件名稱(filename)和最后修改時(shí)間(lastmoditime)的封裝,某目錄下文件的增、刪、改都可通過(guò)該類的屬性檢查即可判別.

2.1.2某目錄下文件列表信息的獲取 以下代碼將獲取某目錄下的所有文件列表,并保存到消息文件中.由于消息文件中存儲(chǔ)的消息負(fù)載只能是字符串類型,因此需要將對(duì)象變換為串類型,采用Google的Json工具實(shí)現(xiàn)轉(zhuǎn)換[6].

2.1.3消息處理的配置文件 Spring Integration的消息處理部件支持XML和注解配置.SpringSource Tool Suite提供了一組工具箱,用可視化方式進(jìn)行部件的拖放連接,可通過(guò)可視化方式定義部件的屬性.可視化的流程編排對(duì)應(yīng)有XML配置源碼,圖2為文件初始登記的處理流程.

點(diǎn)擊圖2中底部的“Source”選項(xiàng)卡可得到XML形式的配置源碼(config1.xml):

圖2 文件初始登記的消息流處理流程

從圖2的流程和配置代碼可看出,應(yīng)用將從通道“channel1”獲取要進(jìn)行登記檢查的目錄路徑信息,消息經(jīng)過(guò)服務(wù)激活器調(diào)用標(biāo)識(shí)為“init”的Bean的匹配方法(logTo)進(jìn)行處理,方法返回結(jié)果包裝為消息通過(guò)通道“channel2”送文件出口適配器,將消息以文件形式保存到指定目錄(f:x).

2.1.3在應(yīng)用程序中裝載配置,發(fā)送消息激活初始登記 文件初始登記可安排在某個(gè)獨(dú)立的應(yīng)用程序中,也可有Web應(yīng)用訪問(wèn)觸發(fā).基本工作是裝載XML配置,將要進(jìn)行安全檢查的具體目錄信息包裝為消息發(fā)送到通道“channel1”.

2.2文件變化檢查處理

文件變化檢查的處理過(guò)程:(1)讀取消息文件中登記的信息;(2)登記信息與目錄下當(dāng)前文件信息進(jìn)行比對(duì),記錄變化;(3)將發(fā)生變化的文件進(jìn)行處理,并自動(dòng)發(fā)送郵件通知管理者.文中將自動(dòng)發(fā)送郵件Bean的配置略,利用Spring框架的mail包的SimpleMailMessage實(shí)現(xiàn)郵件消息的封裝,利用mail.javamail包的JavaMailSenderImpl實(shí)現(xiàn)郵件的發(fā)送[7].由于Spring框架中郵件發(fā)送依托JDK的mail擴(kuò)展包,所以需要在工程的類路徑中加入javax.mail.jar包.利用Spring Integration提供的mail適配器也可實(shí)現(xiàn)郵件發(fā)送處理,但要求在消息頭中封裝郵件的消息頭信息.

2.2.1處理流程的配置文件 圖3是文件變動(dòng)檢查的消息處理流程.(1)通過(guò)入口適配器的poller配置觸發(fā)檢查過(guò)程,它將每天定時(shí)給目錄通道“dirpath”發(fā)送檢查目錄;(2)“文件變動(dòng)檢查”服務(wù)激活器將當(dāng)前文件狀況與消息文件中記錄的信息進(jìn)行比較,得到變化文件信息;(3)文件變化信息通過(guò)通道“channel1”發(fā)送給“文件變動(dòng)處理”的出口適配器進(jìn)行處理.

圖3 消息處理流程

以下為配置對(duì)應(yīng)的XML源代碼(config2.xml):

其中“int”為Integration的名空間,配置中最關(guān)鍵的是輸入通道適配器的任務(wù)定時(shí)執(zhí)行,這里采用Cron定時(shí),規(guī)定每天晚上11∶50∶10激活文件檢查處理,也可改用間隔延時(shí)處理.

2.2.2入口適配器的定時(shí)處理業(yè)務(wù)邏輯 入口適配器主要實(shí)現(xiàn)定時(shí)處理,通過(guò)配置設(shè)置讓其定時(shí)執(zhí)行BeginWork類中begin方法,方法的返回結(jié)果將自動(dòng)包裝成消息發(fā)送給適配器的輸出通道“dirpath”.

2.2.3文件變動(dòng)檢查 文件變化檢查的關(guān)鍵是消息文件中記錄信息的讀取處理.有2種方法讀取消息文件:通過(guò)文件入口適配器;通過(guò)FileReadingMessageSource.筆者采用后一種方法,在程序的logToXML方法中借助FileReadingMessageSource類讀消息文件中的內(nèi)容[8],由該類的receive方法得到消息,進(jìn)而通過(guò)消息對(duì)象的getPayload方法得到消息負(fù)載,它是一個(gè)文件對(duì)象,用BufferedReader流訪問(wèn)該文件即可得到文件內(nèi)容,再通過(guò)Json反轉(zhuǎn)換得到原始文件列表的信息.

2.2.4文件變動(dòng)處理 在流程的出口適配器配置中設(shè)置了處理邏輯,它將分析文件變化消息,并進(jìn)行相應(yīng)處理,通過(guò)自動(dòng)發(fā)送郵件通報(bào)給管理者[9].

對(duì)于文件的各類破壞恢復(fù),本系統(tǒng)采用的辦法是通過(guò)Web界面處理,對(duì)改動(dòng)和刪除文件進(jìn)行異地備份重傳覆蓋.對(duì)新增文件進(jìn)行刪除處理,每次恢復(fù)完畢后重新執(zhí)行初始化登記.

3 結(jié)語(yǔ)

結(jié)合網(wǎng)站目錄下文件安全檢測(cè)應(yīng)用,提出了Spring Integration的應(yīng)用編程處理方法.對(duì)Spring Integration中消息、消息通道的構(gòu)建及消息處理部件的應(yīng)用進(jìn)行了闡述.該應(yīng)用可部署到Web應(yīng)用環(huán)境中,采用Spring MVC編程設(shè)計(jì)應(yīng)用操作界面[10-11],根據(jù)瀏覽器的請(qǐng)求執(zhí)行操作,實(shí)現(xiàn)文件監(jiān)控的遠(yuǎn)程初始化處理,并啟動(dòng)定時(shí)監(jiān)控服務(wù),實(shí)現(xiàn)對(duì)服務(wù)器文檔的遠(yuǎn)程監(jiān)控,通過(guò)郵件得知文件變化,進(jìn)而采取相應(yīng)管理對(duì)策.

[1] 謝承旺,周 娟.電力企業(yè)信息系統(tǒng)應(yīng)用集成技術(shù)研究[J].華東交通大學(xué)學(xué)報(bào),2012,29(2):27-30.

[2] DANIEL J BARRETT,LORI A CLARKE,PERI L TARR,et al.A Framework for Event-Based Software Integration[J].ACM Transactions on Software Engineering and Methodology,1996,5(4):378-421.

[3] 陽(yáng)王東,祝 青,習(xí)勝豐,等.一種面向頻道的消息服務(wù)模型[J].計(jì)算機(jī)工程,2010,36(2):67-69.

[4] MARK FISHER,JONAS PARTNER,MARIUS BOGOEVICI,et al.Spring Integration in Action[M].USA:Manning Publishing Company,2012.

[5] 孫 垚,廉東本.一種基于ESB的高效可靠的動(dòng)態(tài)路由模型[J].計(jì)算機(jī)系統(tǒng)應(yīng)用,2011,20(2):144-148.

[6] 丁振凡.Spring REST風(fēng)格Web服務(wù)的Json消息封裝及解析研究[J].智能計(jì)算機(jī)與應(yīng)用,2012,2(2):9-11.

[7] 鐘 珞,劉 玲,夏紅霞.基于JavaMail API的Web郵件系統(tǒng)開(kāi)發(fā)[J].武漢理工大學(xué)學(xué)報(bào),2006,28(6):84-86.

[8] DR MARK LUI,MARIO GRAY,ANDY CHAN,et al.Pro Spring Integration[M].USA:Apress,2011.

[9] 梁富厚.支持業(yè)務(wù)協(xié)同的集成化多通道消息模型研究及實(shí)現(xiàn)[D].濟(jì)南:山東大學(xué),2011:31-32.

[10] 丁振凡,吳根斌.Spring 3.x MVC模型的數(shù)據(jù)校驗(yàn)國(guó)際化處理[J].計(jì)算機(jī)時(shí)代,2012(8):26-28.

[11] 丁振凡.用Spring MVC實(shí)現(xiàn)數(shù)據(jù)分頁(yè)顯示處理[J].智能計(jì)算機(jī)與應(yīng)用,2012,2(5):20-22.

(責(zé)任編輯 陳炳權(quán))

File Monitoring Based on Spring Integration Message Flow

DING Zhen-fan
(School of Information Engineering,East China Jiao Tong University,Nanchang 330013,China)

Spring Integration provides a simple,efficient mechanism to realize message oriented application integration.It adopts declarative configuration definition connection between message channel and message processing unit.Spring Tool Suite provides a visual toolbox to realize message flow process layout.Combined with a directory file security inspection application,this paper gives the specific programming processing method.Through message files all documents state information is stored in a directory.When detecting,the file information in the directory is compared with the recorded information from the message file,in order that the file changes should be found,and a notice mail be automatically sent to the manager.

spring integration;message;message channel;message endpoint;file change monitoring

TP391

A

10.3969/j.issn.1007-2985.2013.02.006

1007-2985(2013)02-0026-05

2013-01-26

丁振凡(1965-),男,江西豐城人,華東交通大學(xué)信息工程學(xué)院教授,碩士生導(dǎo)師,主要從事云計(jì)算與語(yǔ)義Web研究.

猜你喜歡
適配器郵件消息
基于James的院內(nèi)郵件管理系統(tǒng)的實(shí)現(xiàn)
來(lái)自朋友的郵件
一張圖看5G消息
一封郵件引發(fā)的梅賽德斯反彈
基于3D打印的輕型導(dǎo)彈適配器
潛空導(dǎo)彈垂直發(fā)射出筒適配器受載變形仿真研究
電源適配器怎么選
美國(guó)麥格普公司新型M—LOK相機(jī)三腳架適配器
消息
消息
烟台市| 辉南县| 临武县| 安宁市| 隆回县| 满洲里市| 波密县| 宁津县| 芷江| 双城市| 会泽县| 阿拉善盟| 景泰县| 邵东县| 三穗县| 宁强县| 贵德县| 昌江| 拜城县| 泽州县| 靖江市| 咸宁市| 即墨市| 尤溪县| 新巴尔虎右旗| 彭泽县| 固阳县| 贞丰县| 怀宁县| 万荣县| 合江县| 泽州县| 嘉鱼县| 乌兰县| 东辽县| 博兴县| 个旧市| 巴里| 逊克县| 梁山县| 莱州市|