1. 程式人生 > >通過元件呼叫介面

通過元件呼叫介面

智動運維平臺及其元件都是執行在同一個tomcat程序中,現階段元件與元件間的介面呼叫都是藉助於WbService技術完成。WebService技術底層實現本質是RPCHTTP+XML),以下是RPC的呼叫示意圖:

1)服務消費方(client)呼叫以本地呼叫方式呼叫服務;

2clientstub接收到呼叫後負責將方法、引數等組裝成能夠進行網路傳輸的訊息體;

3clientstub找到服務地址,並將訊息傳送到服務端;

4serverstub收到訊息後進行解碼;

5serverstub根據解碼結果呼叫本地的服務;

6)本地服務執行並將結果返回給serverstub

7serverstub

將返回結果打包成訊息併發送至消費方;

8clientstub接收到訊息,並進行解碼;

9)服務消費方得到最終結果。

WebService技術不適用於智動運維平臺的元件間的呼叫場景,主要有如下兩點考慮:

a.     WebService技術底層藉助HTTP協議完成介面間呼叫,適合程序間程式呼叫;

b.    WebService技術藉助XML進行程式間的呼叫資料傳輸,效能略低。

介面註冊模組主要職能是改善元件間藉助WebService技術實現同tomcat程序中介面呼叫現狀,並實現元件的對外介面由平臺統一管理,由平臺管理的介面可直接供其他元件呼叫。同時在平臺統一管理元件對外介面的基礎上,平臺可根據元件需要將指定介面作為智動運維平臺的北向介面對外統一發布。

介面註冊模組完成上述功能需要做的主要有2方面:

1)通過介面註冊機制獲取到所有元件的對外介面,統一管理;

2)通過介面請求轉發機制實現元件間的相互呼叫需求。

1.   介面註冊

元件按照平臺的對外介面釋出規則,在指定對外介面類上加上註解“@InterfaceRegister”即可,在專案啟動階段藉助Spring的依賴注入機制將所有元件帶有註解“@InterfaceRegister”的介面類中所有介面注入平臺統一介面管理中。

2.   介面呼叫

元件通過平臺的統一介面呼叫代理管理器獲得要呼叫的介面代理物件,通過介面代理物件再呼叫指定的介面獲取返回值。

通過介面註冊模組的規範及機制,讓所有的元件對外介面都完成註冊,並在介面註冊模組由平臺統一管理。

1.2.2    Module/Subsystem 1 Description介面呼叫描述

通過介面轉發機制來實現元件間的介面呼叫。

1.    Data Entity 1Description資料實體1描述

Name名稱:建立預設版本的介面實現類代理物件

Description說明:介面註冊模組提供;供呼叫者呼叫來建立目標介面實現類代理物件,主要引數為(interfaceClassFullName:介面類的全限定類名,methodName:方法名稱,parameterType:引數型別,parameter:引數),返回呼叫目標元件的返回結果。

Definition定義:public Object call(final StringinterfaceClassFullName, final String methodName, final Class<?>[]parameterTypes,final Object...parameters) throws MapNotExistInterfaceBeanException,InvokeMethodParameterException, MethodNameOrParameterTypeError{}

2     Level 2 Design Description第二層設計描述

2.1     介面註冊模組

介面註冊模組主要是按照一定的規範實現一種機制,讓所有元件藉助該機制將介面註冊到平臺,供平臺介面註冊模組統一管理。

規範

1.   元件介面規範

使用  元件名+Service 形式定義元件介面的介面名稱。

方法由元件定義但是引數和返回值要有一定規範

方法引數:為基本型別, 若果是封裝型別將其拆分封裝為JSon物件。

返回值:為基本型別,若果是封裝型別將其拆分封裝為JSon物件。

2.   元件介面實現類規範

使用  元件名+ServiceImpl 的形式定義元件介面實現類的名稱。並在類明上加上註解@InterfaceRegister(元件名+Service.class)。

方法由元件實現。

3.   呼叫時的規範

呼叫平臺代理器的call方法時需要傳入相應引數:

String interfaceClassFullName 介面類的全限定類名

       String methodName:呼叫元件的方法名稱

Class<?>[] parameterType:方法中引數型別

Object[] parameter:方法引數

4.   返回值的規範

如果引數傳入有誤則向元件丟擲相應異常,如果為正確的值則返回元件想要得到的結果。

類名傳入錯誤異常:MapNotExistInterfaceBeanException

方法名或引數型別異常:MethodNameOrParameterTypeError

引數異常:InvokeMethodParameterException

返回值:根據呼叫元件方法的返回值進行型別轉換。

元件呼叫時可根據對應異常做出相應處理。

優點:

可以解耦元件之間的直接聯絡,將元件介面的具體實現類納入spring容器中統一管理,只要元件在spring中註冊,其他元件便可以使用,提高了專案的靈活性,使專案便於管理。

缺點:

呼叫時比較麻煩,組建間需要事先約定知曉呼叫元件介面類的全限定名,方法名稱,引數型別,引數,將以上引數傳入元件介面代理類中的方法來實現呼叫其他元件的方法。而且返回值為Object型別,不知道具體型別,返回值需要元件間約定為基本型別的物件。在傳入資料有誤時,需要給每個引數定義一個異常型別,用於向上層丟擲,最後呼叫者使用try-catch處理相應異常。

使用技術

1.     使用了動態代理和CGLib反射呼叫元件介面方法。

2.     使用Spring註解的放式,通過自定義註解,為元件實現的介面類做標註,注入到Spring容器中。

3.     建立相應的Map屬性,為其賦值,key為通過Spring容器獲取自定義註解物件的全限定類的類名,value為相應元件介面的Bean物件。

5.   InterfaceRegister  介面註冊註解(標註在服務實現類上)

     標註元件對外提供的具體實現類,便於Spring掃描管理。其中定義服務介面類和服務版本號。

2.2     介面呼叫模組

2.2.1    Design Description模組設計描述

1.   InterfaceManager  統一介面管理器

a)    在該類中定義一個存放服務名服務物件之間對映關係的Map屬性。

b)   實現ApplicationContextAware介面,用於在載入Spring配置檔案時,會自動呼叫

ApplicationContextAware 介面中的public void setApplicationContext(ApplicationContext context) throwsBeansException方法,在該方法中為Map賦值--將服務名(元件實現類的全限定類名)作為Key,將元件實現類的物件作為Value存放到Map中。

c)     handle(..)方法,用於CGLib執行反射呼叫,獲取相應元件方法的返回值。

2.   PlatInterfaceProxy  元件介面代理類

該類屬於元件呼叫的直接使用物件,元件呼叫該類的public Object call(final String interfaceClassFullName, final StringmethodName, final Class<?>[] parameterTypes,final Object... parameters) 方法,傳入指定引數,獲取相應資料。

a)      在該類中定義一個InterfaceManager物件作為屬性,用InterfaceManager物件中handle

方法來執行具體的CGLib執行反射呼叫。

b)      定義的call方法用於轉發呼叫者傳入的引數,呼叫者呼叫該方法獲取想要的返回值時,如果傳入的值有誤,則需要定義返回值格式,便於區別傳入引數是否正確,想要的結果是否得到。

3.   元件A  元件呼叫 B元件的方法

A元件類中有一個呼叫B元件的測試方法,該方法通過傳入類的全限定類名、方法名、引數型別、引數來呼叫PlatInterfaceProxy類中的call方法。

呼叫方法,呼叫元件的具體實現方法。

2.2.2    Function Illustration功能實現說明

This section could listall the entities such as data stores (tables, stored procedures, triggers,etc.); a verbose description of what that entity pertains to and list of allits attributes. For each of the attributes, its database, the data size,specific constraints and a verbose description of that attribute should bespecified. All specific constraints for that entity and its relationship withother entities should also be noted.

本節列出所有的資料儲存類的實體(表、儲存過程、觸發器等),詳細描述實體的內容和並列出全部屬性。對每個屬性,詳細描述其資料庫、資料大小、特定約束。實體的所有約束及實體間的關係也要註明。

Represent the designconsiderations and constraint rules.

The key tables, viewsand the items, functions, storage requirements, integrity constraints andstresses should be defined here. The initial setup data should be consideredconcerning the static tables.

闡述設計思路及約束規則。

詳細定義每個關鍵資料表、檢視中的各個欄位屬性、儲存要求、完整性約束、功能、注意事項,靜態資料表可考慮定義初始配置記錄。

E-R diagrams could beused to depict the relationships between the entities, and the requirements ofthe storage spaces, performances and integrity should be analyzed.

使用E-R圖描述實體間的關聯依賴關係,分析對存取空間、效能、完整性的要求。

The stored proceduresand triggers should be classified according to its functions, etc., to bedescribed in detail and decomposed. The main functions of every sort of SPs ortriggers should also be represented.

Recount the functions,input, output, return value, return set, the depended tables and storedprocedures, and special requirements such as transactions.

根據功能或其他方式對儲存過程/觸發器進行歸類,便於進一步細化和分解,並說明每類儲存過程/觸發器主要功能。

詳細定義每個儲存過程(觸發器)的功能、輸入輸出引數、返回值、返回的記錄集、依賴的資料表和儲存過程,以及一些特殊要求(比如需要啟用事務等)。

Represent thedependency with the external modules.

描述與其它模組之間的依賴關係。

Represent thedependency between the internal stored procedures, triggers, tables and views.

描述儲存過程間、儲存過程和資料表/檢視間依賴關係。

Component diagrams areused to represent executable components, including executable files (EXE),Dynamic Link Libraries (DLL), etc.

Deployment diagrams areused to show the mapping of processes to hardware.

使用Component圖、deployment圖來描述系統的執行元件(EXE檔案、DLL等),及其網路部署情況。

A directory tree isused to show how the source files are organized.

描述原始碼檔案的目錄結構(資料夾中各個目錄下應存放什麼檔案)。

This section describesthe system's decomposition into lightweight processes (single threads ofcontrol) and heavyweight processes (groupings of lightweight processes).Organize the section by groups of processes that communicate or interact.Describe the main modes of communication between processes, such as messagepassing, interrupts, and rendezvous.

本節描述將系統分解為輕量級程序(單個控制執行緒)和重量級程序(成組的輕量級程序)的過程。本節按照各個通訊或互動的程序組來加以組織。說明程序之間的主要通訊模式,例如訊息傳遞、中斷和會合。