




摘要:在常規民航消息廣播訂閱模式的使用過程中,并非所有發送方發送的消息都需要每個訂閱方處理。對于無需處理的消息,往往會占用消費方資源,對消費方處理錯誤報文的能力有一定要求。如果發送方發出對于廣播下某個業務的定制化報文,其他業務需要做兼容過濾,才能保證無關報文不會影響自身業務正常運行。而這會加重開發的復雜程度。基于民航消息系統自定義規則的動態消息過濾方法通過動態獲取并解析業務配置的自定義規則,根據規則進行消息過濾,極大降低了消費方的開發成本及設計復雜度,提高了整個集群服務的可用性,提升了整體服務的質量。
關鍵詞:消息過濾;過濾規則;消息廣播訂閱模式
一、前言
中國民用航空局《智慧民航建設路線圖》明確提出要以智慧出行、智慧空管、智慧機場、智慧監管為抓手,強化改革創新、科技創新、基礎保障三大支撐,實現完備的智慧民航運輸系統、產業協同發展體系、改革創新推進機制、運行基礎設施環境,實現跨業務領域數據資源的融合創新和挖掘分析[1]。作為民航信息系統的運營主體,隨著各航司業務復雜度的增加,民航機場的旅客行李等業務報文的消息傳輸量也變得越來越多,在這種場景下,消息處理模式的選擇就變得非常重要。由于在民航機場消息傳輸業務場景中,系統模塊間消息傳遞有著大量應用場景,消息廣播訂閱模式的使用逐漸成為業界共識。消息訂閱模式可以高效將發送方傳遞的消息廣播給各個不同的消費方,但是對于當下復雜多變的民航機場業務場景[2],廣播訂閱模式也有很多缺點。首先在該模式下,每個訂閱的消費者都會接收到相同的消息,但是在民航機場業務中,并非所有發送方發送的旅客行李等業務報文消息都是需要每個訂閱方處理的。對于無需處理的消息,往往會加重消費方的負擔,占用消費方資源,影響消費方的處理速度。其次,該模式對消費方對于錯誤報文的處理能力或者對于發送方傳遞的報文內容有一定要求。如果發送方發出了對于廣播下某個業務的定制化報文,其他業務的消費方需要做兼容過濾,才能保證這種無關報文不會影響自己的業務正常運行,而這往往會加重開發的復雜程度。
二、相關技術介紹
消息中間件中應用的廣播訂閱模式就是當發送方發送一條消息到消息隊列中后,所有訂閱這條隊列的訂閱方均能接收到這條消息。該模式可以有效地把消息傳遞給每個需要的有業務關聯的消費者[3]。
消息過濾機制具有精確、高效的優點,基于消息標記或者消息內容等方面可以通過使用消息內容對比[4],方便地匹配出業務所需的消息,和廣播訂閱模式整合后,可以使消費客戶方聚焦于自己業務邏輯的開發,而不再關心冗余消息的處理。
為了解決上述問題,本文提出了一種在廣播訂閱模式下由消息中間件自主完成的支持自定義規則的動態消息過濾方法。通過動態獲取業務配置的自定義規則,解析規則的語法語義,根據解析出來的規則含義,對比消息內容是否匹配,如果匹配則按規則將消息過濾,如果不匹配,則將消息正常導入消費服務中,從而實現由消息中間件獨立實現的動態消息過濾機制。該方法最大限度地降低了消息廣播模式下的消費方對消息解析并過濾功能的開發成本以及設計復雜度。同時由于消息過濾是由消息中間件實現,所有使用本消息中間件的服務天然具備了消息過濾功能,極大地提高了整個集群消息交互服務的可用性,提升了整體服務的質量并能支持多種復雜業務場景。
三、技術方案
本方法提出了一種基于語法解析和消息內容比對實現,可以根據接收方動態設置的消息過濾規則完成消息過濾,并動態生效。
通過使用語法解析器,解析規則控制器設置的過濾規則,轉化為服務端可用的多種規則控制器,控制器通過對比隊列中的消息內容,過濾掉不符合規則的消息,只把符合規則的消息內容推送給消費者客戶端。在訂閱模式下,不同消費者之間可以獨立設置不同的過濾規則,從而不互相影響,見圖1。
(一)系統組成
本方法由過濾規則控制器、過濾語法解析器、隊列組(隊列1、隊列2)、消息過濾控制器組組成,見圖2。
過濾規則控制器:根據消息過濾規則發布者結合業務場景設置過濾發布規則,生成符合語法規則的多種消息過濾規則,包括根據消息屬性鍵值過濾、消息標記位過濾、消息屬性鍵值對值過濾等,并把規則存儲在服務端緩存。
過濾語法解析器:主要完成根據特定語法語義規則對過濾規則控制器傳輸過來的消息過濾規則進行語法解析,并將解析后的規則語句和不同的消息過濾控制器相互匹配。
隊列組:消息傳輸媒介,完成帶有標識的消息的傳輸,并把消息持久化到磁盤存儲。
消息過濾控制器:根據過濾語法解析器匹配出的過濾控制器中相應的解析后的過濾規則逐條匹配隊列中的消息內容,并將規則匹配的消息內容傳遞給消費者客戶端,規則不匹配的消息則過濾掉。
(二)實現原理
本文提出了一種在廣播訂閱模式下由消息中間件自主完成的支持自定義規則的動態消息過濾機制實現方法,其核心思想就是通過解析規則發布者設置的灰度規則,選擇對應語法的過濾規則控制器,由相應控制器對隊列中的消息逐條匹配,每條消息內容是由消息屬性、消息標記位和消息體組成的,過濾控制器會匹配消息內容或者消息屬性是否和規則語法匹配,對匹配的消息會傳遞給消費者,動態過濾掉不匹配規則語法的消息,達到對消息進行過濾控制的目的,從而實現消息的過濾處理機制。在訂閱模式下多消費者互相獨立的過濾規則,在隊列組中隊列需要支持訂閱模式的基礎上通過解析的語法規則對應的消息過濾控制器不同,每個過濾器會匹配不同的隊列消息副本完成實現消息消費同時不互相影響。
圖3分別描述了從業務發送消息到對消息進行解析過濾并傳給消費者業務操作的整個過濾業務邏輯的詳細流程。
整個處理流程可以分為服務消息過濾流程和發布過濾規則解析流程,下面分別對這兩個階段進行詳細描述。
服務消息過濾流程:
1.消息發送者向隊列中發送一條消息請求,消息格式為消息屬性、消息標記位和消息內容體組合而成。
2.消息進入隊列中并存儲。
3.當消費者服務從隊列拉取消息時,規則處理器會先判斷相關的隊列和消費者信息是否開啟了對應消息過濾開關。
4.如果沒有配置相關過濾規則開關,則直接把消息推送給消費者客戶端。
5.如果配置了相關過濾規則開關,則過濾處理器會逐條檢索每條消息(檢索消息屬性,消息報文體,消息標記)。
6.過濾處理器會過濾掉不符合消息規則的消息。
7.如果過濾處理器檢索到匹配過濾規則,會把消息推送給消費客戶端。
發布過濾規則解析流程:
1.用戶結合實際業務場景設置多種不同級別的消息過濾規則策略。
2.語法解析器根據特定語法語義規則對過濾規則控制器傳輸過來的消息過濾規則進行語法解析。
3.語法解析器將解析后的規則語句和不同的消息過濾控制器相互匹配。
4.語法解析器將匹配到的過濾控制器提供給消息過濾使用。
四、具體實施方式
本文的關鍵技術點集中在過濾語法解析器以及消息過濾控制器中,分別為結合民航消息系統業務場景的多種過濾語法定義和解析、消息過濾處理機制。下面分別描述以上技術點的詳細說明方法。
(一)結合民航消息系統業務場景的多種過濾語法定義和解析
消息過濾規則的語法需要貼合民航消息系統當前業務所使用的消息報文格式,目前民航消息系統傳輸的一條報文消息是由三部分組成的,分別是消息屬性、消息標記位和消息內容,見圖4。
消息標記位是字符串類型,用來給消息標記類型。消息屬性是由Key和Value組成的鍵值對Map類型,用來傳輸消息附加屬性。消息內容是二進制類型數據,用來記錄消息內容體。
為了保證用戶傳輸過濾場景的多樣性,消息過濾規則支持三種類型的過濾:對消息標記位內容進行過濾、對消息屬性鍵值對的Key值進行過濾和對消息屬性鍵值對的Value值進行過濾。由于消息傳輸過程中,逐條按位解析消息內容會對消息傳輸性能產生影響,所以在進行消息過濾規則設置時,并不對消息內容進行檢索解析,從而保證了過濾機制的性能幾乎無影響。接下來詳細介紹過濾規則語法。
主要語法規則如下:
過濾規則語法主要由三部分組成,即 lt;屬性gt; lt;操作gt; lt;值gt;。
過濾規則以lt;屬性gt;開頭,屬性可選如下三個值:
1.@tag
2.@attr
3.attr中的鍵:attr.name
分別代表著:
@tag消息標記位內容
@attr消息屬性鍵值對key值
attr中的鍵是消息屬性鍵值對的value值
過濾規則居中的是lt;操作gt;部分,操作可選如下值:
1.beg:以lt;值gt;開始
2.end:以lt;值gt;結束
3.weq:等于lt;值(字符串)gt;,支持通配符*,?
4.nweq:不等于lt;值(字符串)gt;,支持通配符*,?
5.ex:鍵值是否存在(attr),是
6.nex:鍵值是否存在(attr),否
7.gt:大于,值為數字
8.ge:大于等于,值為數字
9.le:小于等于,值為數字
10.lt:小于,值為數字
11.eq:等于,值為數字
12.neq:不等于,值為數字
操作主要包含對屬性部分的具體匹配操作,由于屬性中包含字符串內容、數字、字母、中文,還有常用通配符需求,所以在操作中把如上判斷都進行了兼容整合。
lt;值gt;字段則是具體需要按操作匹配的具體內容。
按如上語法規則定義后,可以組合產生多種含義的不同語句,詳細說明如下:
1.“@tag beg prefix”" 代表著篩選出以prefix開頭的tag的消息
2.“@tag end suffix”" 代表著篩選出以suffix結尾的tag的消息
3.“@tag gt 1000 ? ?” 代表著篩選出tag值大于1000的消息
4.“@attr ex type ?”" 代表著篩選出attr是否存在type為key的消息
5.“type weq CA? ? ?”" 代表著篩選出attr中key為type 對應的value值內容是否等于 CA的消息
6.“mode neq 500 ? ?”代表著篩選出attr中key為mode 不等于 500的消息
7.“name beg ca ? ?” 代表著篩選出attr中key為name 以ca開頭的消息
(二)消息過濾處理機制
消息過濾處理主要是根據解析過濾規則語法,并從語法的屬性和操作組合中找到對應不同的過濾控制器。消息過濾控制器負責檢索每條消息的消息屬性的鍵值對和消息標記位內容。根據規則過濾掉不符合規則語義的消息,達到消息分流的目的從而實現消息過濾處理能力。
圖5描述了過濾控制的完整流程,以下詳細描述:
1.消息生產者生產兩份內容相同的消息到隊列組的不同兩個隊列中。
2.消息內容分別按順序傳入內容標記位為tag1,屬性為attr2,屬性為attr1,標記位為tag2,屬性為attr1的5條消息。
3.消息過濾語法解析器根據過濾規則控制器產生的過濾控制規則(@attr weq attr1,@tag beg tag1)含義為找到attr屬性等于attr1的消息和找到tag標記位以tag1開頭的消息;根據規則獲取相應的消息過濾器。
4.過濾控制器會先從隊列中逐條比對消息內容,并把符合過濾規則的消息單獨取出。
5.過濾控制器會把取出的消息重新按順序排序后,返回給消費者。
通過以上過程完成消息中間件的消息過濾控制,并且通過動態產生處理規則可以動態調整消息過濾情況。
五、結語
本文介紹了基于民航消息系統自定義規則的動態消息過濾方法,在民航消息發布訂閱模式下,可以根據業務場景設置自定義的精細粒度的過濾規則,并動態解析生效,可以把業務需要的消息精準地過濾在指定的消息內容中,做到最小化精確消息過濾語法,并完成消息過濾控制,具有簡化業務開發復雜度、提升效率,提高業務消息處理速度等優勢。
參考文獻
[1]中國民用航空局.智慧民航建設路線圖[EB/OL]. [2022-05-25].https://www.gov.cn/xinwen/2022-01/21/5669771/files/f7402a57bcf349b0ae8d1224a0f35737.pdf.
[2]章鵬.消息中間件技術在數字電視應急廣播中的應用研究[J].有線電視技術,2019(03):28-31.
[3]呂勇,謝長生,高三紅.實時測控計算機應用系統的可靠性保障技術[J].計算機應用,2003(06):101-103+106.
[4]王重楠,王宗陶,鮑忠貴,等.發布/訂閱模式測控消息中間件系統設計[J].計算機應用,2015,35(03):878-881.