簡介
了解業務處理、更具靈敏性、近乎實時地監測管理和遵從性情況是不斷增長的 企業業務線需求。基於事件的解決方案通過快速有效地利用機會和減少異常來支持業務和 IT 管理企業風險。當業務事件處理技術與業務線應用結合時,就創造了一個機會來構建解決方案 ,從而提供更多的靈活性並幫助檢測關鍵遵從性和管理情況。事件支持即時發現機會和異常, 也可以發起適當的響應。
IBM® WebSphere Business Events(以下稱為 Business Events)是一個復雜的事件處理引擎,有助於業務基於可操作事件模式的發現檢測、評估和響 應業務事件。它能夠將任何來源的業務事件在任何時間范圍內關聯起來。Business Events 支 持各種接收事件和發起操作的傳輸。分布式應用程序可以使用的最簡單的一個傳輸是基於 HTTP 的具象狀態傳輸(Representational State Transfer,REST)接口,盡管新 REST API 是在 Business Events V7 中引入的,但本文涉及的基於 REST 的事件創建在 V6.2.1 和 V7 中都受 支持。
REST 是一種架構風格,其中的每一個資源都是用一個統一資源標識符 (Universal Resource Identifier,URI)惟一表示的。當用戶在網絡上使用 URI 訪問多個資 源時,將會有一個狀態上的改變或者轉換。這就是具象狀態傳輸。在 Business Events 中,每 個定義的事件是一個資源,都有一個 URI 可用來創建事件的特定實例。
盡管其他 IBM 產品,比如 CICS® Transaction Server 和 WebSphere Message Broker,都提供直接從應 用程序或流中發出事件的機制。但仍然有很多應用程序沒有這種功能。在本文中,您將學習如 何使用 Business Events REST 接口從任何使用 Web 協議的應用程序發出業務事件。
先決條件
為了完成本文的步驟,您需要掌握以下幾點:
WebSphere Business Events。
Java™ 編程語言
Web 協議
您必須安裝以下軟件:
WebSphere Business Events V6.2.1 或更高版本。
JDK 1.6 (用來編譯和運行示例 )。
業務事件和操作
業務事件就是在業務中發生(或者沒有發生)的事情。事 件源可以是從 RFID 傳感器到業務應用程序的任何東西。事件被發送到一個諸如 Business Events 的復雜事件處理引擎。事件處理引擎可將這些事件關聯起來,然後根據用戶定義的規則 發出操作。
讓我們看一個出現在銷售網點應用程序中的訂單事件示例。您可以對其進行如下定義:
如果一個訂單值超過 $1000,收集以下數據:
Name
Contact number
Item
Order value
該事件的操作是將該客戶放入一個溢價名單, 為後續訂單提供較好的報價。在這個例子中,銷售網點應用程序是事件來源,將會發送事件給 Business Event。Business Events 根據事件處理邏輯采取用戶定義的適當行動。圖 1 展示了 這一場景。
圖 1. 訂單事件示例
從任何應用 程序發出事件
繼續以銷售網點應用程序為例,我們假設應用程序本身沒有發送業務事件 功能。我們將看到,如何輕松地向應用程序添加事件發出功能。
第一步是確認事件出現 的地點並為事件收集必要數據。所有數據收集完成之後,建立一個事件包(Business Event 格 式)然後調用 Business Events 的 REST 接口。
理解 Business Events 事件格式
Business Events 支持多種傳輸協議,比如 JMS、文件和 HTTP,來發送事件。本文中 我們使用 HTTP。
HTTP 可傳輸兩種不同的事件格式:HTML Form 和 Connector Packet 。顧名思義,在 HTML Form 格式中,事件是通過一個 HTML 表單直接發送。Connector Packet 是事件的標准 Business Events XML 格式。本文中我們將使用 Connector Packet 格式。
Connector Packet 格式
Connector Packet 格式如清單 1 所示,是一個事件和 操作的常用模式。
清單 1. Business Events Connector Packet 格式
<connector xmlns="http://wbe.ibm.com/6.2/packet-type/packet-name" name="connector-name"
version="6.2">
<connector-bundle name="connector-bundle-name" type="Event">
<event-object-name>
<field-name [data-type="data-type"]>field-value</field-name>
<field-name [data-type="data-type"]>field-value</field-name>
</event-object-name>
</connector-bundle>
[<system>SENDING.SYSTEM.INSTITUTION.COM</system>]
[<timestamp>0000-00-00T00:00:00</timestamp>]
[ <loginfo>MESSAGE</loginfo>]
</connector>
表 1 對清單 1 中的元素進行了說明。* 是可選元素。
表 1. Connector Packet 字段描述
元素 說明 packet-type 事 件/操作包的類型 packet-name 事件/操作名 connector-name 連接器名或接觸點 event- object-name 對象事件名 system* 發送有效載荷的系 統名 time stamp* ISO8601 格式的時間戳,表示事件時間 loginfo* 包含在 WBERuntime 事件日志中的消息在事件對象中,您可以將事件(也叫做事件有效載荷)的數據放置 在名/值對中。
事件對象
讓我們創建一個名為 WBEEvent 的對象,獲取事件數據 ,構建一個事件連接器包,並將其發送給 Business Events。圖 2 顯示了 WBEEvent 對象的類 圖。該對象有四個屬性和兩個方法,詳述如下。
圖 2. WBEEvent 對象類圖
其中:
EventName 是事件名。
HostName 是 Businesses Events 運行所在的主機名。
PortNumber 是 Application Server 端口號。
DataElements 是一個在名/值對 中包含事件數據的向量。
AddData()是一個將事件數據作為名/值對的方法,並將其存儲 在 DataElements 向量中。
Send() 是一個使用事件名和數據組成事件連接器包的方法 。此方法也可以使用 EventName、HostName 和 PortNumber 為事件構建一個 URI。它將使用 HTTP POST 方法調用 REST 接口。如果 POST 成功,Business Events 將發送一個 HTML 響應 “Form processed” 。
事件傳輸格式
事件傳輸格式有兩部分:一個 HTTP 請求頭和事件有效載荷(是事件連接器包)。圖 3 顯示了在線路上發送的最終事件消息 。
圖 3. 事件傳輸格式
使用 Java 示例發送事件
本文將提供一個用 Java 編寫的 WBEEvent 對象的示例實現供您 下載。 PointOfSale 類實例化 WBEEvent 對象並向 Business Events 發送事件。
在 Business Events 中定義事件
為了測試示例,您需要定義 OrderEvent 和 Business Events 操作 。為此,完成以下步驟:
選擇 Start => Programs => IBM WebSphere Business Events V7.0 => Design Data,打開 Design Data 工具。
選擇 Insert => Touchpoint,創建一個名為 REST 的接觸點。出現輸入名稱提示時,輸入 REST 並單擊 OK。
選擇 Insert => Event => Blank,出現輸入名稱提示時,輸入 OrderEvent 並 單擊 OK。
右鍵單擊 OrderEvent 並選擇 Event Properties,更改事件屬性來配置 HTTP 連接。單擊 Connection 選項卡並選擇 HTTP Connection。
單擊 Configure,然 後選擇 Connector Packet 作為格式、http 作為傳輸協議。
單擊 OK,再次在 Event OrderEvent Properties 對話框單擊 OK。所有屬性設置完成後,您的對話框如圖 4 所示。
4. 事件屬性
選擇 Insert => Event Object=> Blank 來插入一個事件對象。調用對象 OrderEvent_Data。該對象名是很重要的,因為在組成連接器包示例中,我們假設事件對象名是 <event name>_Data。
右鍵單擊 OrderEvent_Data 對象並選擇 Insert Event Object Field,然後插入表 2 所列字段:
表 2. 事件對象字段
字段名 數據類型 Name 字符 串 ContactNumber 字符串 Item 字符串 OrderValue 整型定義了所 有的字段之後,您的屏幕看起來像圖 5 這樣。
圖 5. 事件對象字段
現在您需要創建一個 Intermediate 對象。Intermediate 對象是代表那些被用於構建事件 處理邏輯的業務對象。選擇 Insert =>Intermediate Object => Blank 並指定 OrderEvent_Obj。
選擇所有事件對象字段(使用 Ctrl 鍵來選擇多個字段),然後將其 拖放到 Intermediate object 窗口。完成這些操作之後。您的窗口如圖 6 所示。
6. Intermediate 對象
現在您需 要為該事件定義一個操作。您可以定義任何類型的操作,從發送一個 email 到更新一個儀表板 。對於本例,我們將創建一個操作,該操作在文件系統中創建一個名為 Action_data 的文件。 要插入操作,選擇 Insert => Action> Blank,然後調用操作 OrderAction。
右 鍵單擊 OrderAction 並選擇 Action properties,為操作設置連接屬性。
在 Connection 選項卡上,選擇 File System Connection。為格式選擇一個 Connector Packet 並單擊 Configure。
輸入圖 7 所示屬性,並單擊 OK,然後再次單擊 OK 關閉操作屬性 。
7. 操作屬性
單擊 File => Save As => Project To Server Store 保存項目。打開的對話框顯示項目存儲。項 目存儲是保存項目的區域,可以使用設計工具找到。選擇一個文件夾或者創建一個新文件夾來 保存項目,然後在對話框底部的輸入框中指定項目名 simple_rest,並單擊 Save。
接 下來您需要為訂單事件定義邏輯;也就是說,收到 OrderEvent 後, 如果 OrderValue 大於 1000 則調用 OrderAction。為此,可以使用 Business Space 中的設計工具。
選擇 Start => Programs => IBM WebSphere Business Events V7.0 => Business Space 。
輸入您的 UserID 和 Password 登錄 Business Space。
如果您是第一次登錄 ,將會看到一個歡迎頁面。單擊 Start。
單擊 Create Space 創建您自己的空間。指定 Simple Rest 作為頁名。
單擊 Edit Page。在頂部您將看到許多小部件。將 Business Events Design 小部件拖到頁面上。操作完成後,您的屏幕如圖 8 所示。
8. Business Events Design 小部件
在 Design Data 中,您將數據模型保存在項目存儲中,這意味著您可以輕松地打開 Business Space 中的 項目來添加業務邏輯。為此,單擊 Business Events Design 小部件,並選擇 Project =>Open。
您可以看到您的文件夾和 simple_rest 項目。選擇 simple_rest 並單擊 Open。
在 Current Project 面板中,您可以看到迄今為止您已經創建的資產的樹狀結 構以及交互集占位符和過濾器。
為訂單值大於 1000 的訂單創建一個過濾器。單擊 New filter,然後單擊 new filter 為過濾器命名。調用過濾器 Order more than 1000。
選擇 operand => Select a field,然後單擊 OrderEvent_Obj 展開列表,並選擇 OrderValue。
選擇 operator => Numeric operators,然後選擇 Is Greater Than 。
選擇 click for operand 和 Enter value。輸入 1000。
完成這些操作之後 ,過濾器如圖 9 所示。
圖 9.過濾器
單擊 New interaction set,創建一個交互集。
單擊 new interaction set 區域並指定名稱為 Order Interaction。單擊 Click to select an event => REST 並選擇 OrderEvent。單擊 靠近 Always 的三角形,然後選擇 Add a Filter。單擊文件夾名(默認是 New Folder)並選 擇 Order more than 1000 過濾器。單擊靠近 Action 的三角形並選擇 REST=> OrderAction。您剛剛為 OrderEvent 創建了業務邏輯:為了響應 OrderEvent,如果 OrderValue 大於 1000,OrderAction 立即被調用。您的交互集如圖 10 所示。
10. 交互集
既然您已 經完成了數據模式和業務邏輯定義,那麼就需要將項目發布到 Business Events 運行時。在 Business Events Design 小部件的工具欄上單擊 Runtime,然後單擊 Publish to runtime, 項目資產發布到運行時。查看狀態欄(在工具欄下面)。狀態消息是:“Publishing project: published successfully。”
現在,配置完成了!啟動連接器(位於 Design Data 工具中)。當連接器准備接收事件時,您將看到如圖 11 所示的 Connectors 控制 台。
11. Connectors 控制台
您可以運 行示例 Java 程序來測試訂單事件。示例有兩個命令行參數:運行 Business Events 的主機的 名稱和應用程序端口號。如果一切順利,程序輸出將如清單 2 所示。
清單 2. 示例程 序輸出
C:\>java -jar OrderEvent.jar leander.ibm.com 9080
Creating OrderEvent Object....
Adding Event data:
Name = John
ContactNumber = 847-111-1111
OrderValue = 5000
Item = Computer
Sending event to WBE........
Event sent successfully
如果您在 Connectors 控制台中查看消息,將會看到 OrderEvent 被接收且 OrderAction 被調用。Connectors 控制台如圖 12 所示。
12.帶有事 件消息的 Connector 控制台
結束語
在本文中,您學習了什麼是業務事件以及如何使用它們獲取業務洞察 。現在您理解了 WebSphere Business Events 事件格式。我們建立了一個可以收集事件數據的 對象,構建了 connector packet 格式的事件,並使用 REST 接口將其發送到 Business Events。現在您可以參考本文使用 Business Events 的 REST 接口從任何應用程序發出業務事 件。