用社交網路連線 WebSphere MQ:列隊管理器和 MQ 應用程式的 Twitter 通知
簡介: 如今,社交網路無所不在 —— 為了與朋友聯絡,或是為了讓自己與時俱進,抑或是為了讓別人獲知共同關心話題的最新進展。社交網路在企業中也很有用。本文將向您展示如何快速而輕鬆地在您的 WebSphere MQ 應用程式中使用社交網路軟體(比如 Twitter)向廣大的系統管理員或終端使用者,甚至是向其他應用程式或中介軟體傳送狀態及問題資訊。本文中的示例使用的是面向 WebSphere Application Server Community Edition 執行時的 JEE 技術(簡單的訊息驅動的 bean)的 WebSphere MQ 和 Twitter API。
社交網路已經取得了爆炸式的發展,下面所列就是一些社交網路的站點:Facebook、LinkedIn 和 Twitter。各企業現在也開始著手建立內部的社交網路,而 IBM 的 ® Lotus® Connections 產品可以讓我們很方便地建立企業規模的社交網路。
本文將向您展示如何在一個企業訊息產品,比如 WebSphere® MQ 內使用社交網路軟體。本文中的三個示例使用的是 Twitter,但也可以使用其他的具有 API 的社交網路站點。這三個 MQ-Twitter 的例子是:
- 一個簡單的佇列,文字訊息將從這裡被檢索並直接釋出給 Twitter
- 佇列管理器事件,例如建立或刪除佇列
- 一個使用了 WebSphere MQ File Transfer Edition(後面簡稱為 WebSphere MQ FTE)的釋出/訂閱示例
本文的示例是用部署到 WebSphere Application Server Community Edition 的訊息驅動 bean (MDB) 開發的。另一種方式是使用一個具有訊息偵聽器的獨立 Java™ 應用程式。下面將要介紹的這些程式碼清單均擷取自一個 zip 檔案,這個 zip 檔案包括了執行這個示例所需的所有原始檔。您可以在本文的末尾 下載這個 zip 檔案。
很多 Java 庫都提供一個到 Twitter API 的介面。本文中的示例使用 Apache Commons HTTP 庫與 Twitter API 通訊。Twitter API 是一個很好的規範 —— 要了解更多資訊,請參見 Twitter API wiki。
清單 1 內顯示的這個 Java 方法可用來 tweet 一個給定訊息。要獲得完整的 Java 類,請下載並參考上述的 zip 檔案。
清單 1. TwitterPlugin.java: sendNotification() 方法
public void sendNotification(String message) { if(message.length() > 140) { System.err.println("Message will be truncated from: " + message + " to: " + message.substring(0, 140)); } PostMethod post = null; try { HttpClient client = new HttpClient(); client.getParams().setAuthenticationPreemptive(true); client.getState().setCredentials(new AuthScope("twitter.com", 80, "realm"), new UsernamePasswordCredentials(getUsername(), getPassword())); post = new PostMethod("http://twitter.com/statuses/update.xml"); post.setQueryString(URIUtil.encodeQuery("status="+message)); post.setDoAuthentication( true ); // execute the GET int status = client.executeMethod( post ); // print the status and response System.out.println("Status: " + status); } catch (URIException e ) { System.err.println(e.getMessage()); } catch (HttpException e) { System.err.println(e.getMessage()); } catch (IOException e) { System.err.println(e.getMessage()); } finally { // release any connection resources used by the method if(post != null) { post.releaseConnection(); } } } |
使用簡單的文字訊息,可以快速地將 MQ 訊息轉換為 Tweet。本例使用了一個標準的 MQ 佇列。要想驅動這個示例,可以使用任何能將一個文字訊息放到佇列上的應用程式,比如隨 WebSphere MQ 所帶的 amqsput 示例。以下是 MDB 程式碼:
清單 2. SimpleMQEJB.java: onMessage() 方法
public void onMessage(Message message) { if(message instanceof TextMessage) { try { /* Put your twitter username and password here */ TwitterPlugin tp = new TwitterPlugin("YOUR_TWITTER_USERNAME", "YOUR_TWITTER_PASSWORD"); String utput = ((TextMessage) message).getText(); tp.sendNotification(output); } catch(JMSException e) { e.printStackTrace(); } } else { System.err.println("This application requires" + " a message in TextMessage format"); } } |
上述程式碼很簡單:它獲取 MQ Message 的有效負載,將它截短到 140 個字元,然後用 TwitterPlugin.java 程式碼張貼它。圖 1 顯示了此示例在我的 mq_tweet twitter 帳戶上的輸出:
WebSphere MQ 通過 MQ Events Messaging 提供了一個佇列管理器內的錯誤、警告和其他重大動作的相關資訊。在配置了以上功能後,WebSphere MQ 會將一個訊息放到一個特定佇列上,然後應用程式可以從這個佇列中使用這個訊息並根據這個訊息的內容執行動作。有關 WebSphere MQ 監視的事件型別的更多資訊,請參見 WebSphere MQ 資訊中心中的 Event monitoring。若要為一個 MQ 佇列管理器啟用事件訊息,請遵循 WebSphere MQ 資訊中心中的 Controlling configuration, command, and logger events 中的指導。
清單 3 顯示了另一個 MDB,但這次它被配置為從 SYSTEM.ADMIN.CONFIG.EVENT 佇列中讀取訊息。這個 MDB 獲取訊息並用簡單的邏輯決定將什麼訊息傳送給 Twitter:
清單 3. MQEventMDB.java: onMessage() 方法
public void onMessage(Message msg) { if(msg == null)return; if (msg instanceof TextMessage) { TextMessage txtMsg = (TextMessage) msg; try { System.out.println("Received TextMessage: " + txtMsg.getText()); } catch (JMSException e) { e.printStackTrace(); } } if (msg instanceof BytesMessage) { JMSBytesMessage bytesMsg = (JMSBytesMessage) msg; int bodySize; try { bodySize = (int) bytesMsg.getBodyLength(); byte[] data = new byte[bodySize]; bytesMsg.readBytes(data); ByteArrayInputStream bais = new ByteArrayInputStream(data); DataInput dataInput = new DataInputStream(bais); PCFMessage response = new PCFMessage(dataInput); int reason = response.getReason(); int type = response.getIntParameterValue(MQConstants.MQIACF_OBJECT_TYPE); if(type == MQConstants.MQOT_Q) { publishQueueEvent(response, null); } else { System.out.println("Object Type received: " + reason); } } catch (Exception e) { e.printStackTrace(); } } } |
由於 MQ Event 訊息是以 PCF 格式釋出的,所以必須要將 JMSBytesMessage 物件轉換成 PCFMessage 物件。可以按照以下的步驟來完成這個轉換:讀取入向訊息的位元組並建立一個 DataInput 物件,然後將它傳遞給 PCFMessage 的建構函式。圖 2 中所示的是當建立一個佇列時所生成的一個輸出示例:
WebSphere MQ FTE Transfer Message MDB
WebSphere MQ FTE 是 WebSphere MQ 的一個新版本,它可以設法實現安全可靠的檔案傳輸,並能釋出關於傳輸審計日誌的訊息。有關這些審計訊息的 XML 模式的資訊,請參見 WebSphere MQ FTE 資訊中心的 Message formats。聯合使用 MDB 及一些 JAXB 程式碼,可以對檔案傳輸的開始和結束進行 Twitter,甚至可以包括在一次傳輸的後設資料中定義的一些雜湊標籤。
清單 4 是特定於 WebSphere MQ FTE 的 MDB。這裡,沒有連線到一個佇列,而是連線到一個 FTE 主題。如果後設資料的名稱是以關鍵詞 Twitter 開頭的,那麼與這個檔案傳輸相關聯的這個後設資料將被追加到狀態訊息。例如,Twitter.tag=SimpleTweet 會導致 #SimpleTweet 被追加到這個被髮送的訊息:
清單 4. MQEventMDB.java: onMessage() 方法
public void onMessage(Message message) { if(message instanceof TextMessage) { try { TwitterPlugin tp = new TwitterPlugin("YOUR_USERNAME", "YOUR_PASSWORD"); String utput = ((TextMessage) message).getText(); String notification = null; if(output.contains("TransferLog.xsd")) { if(output.contains("started")) { Transaction transaction = generateTransaction(output); String transferName = getJobName(transaction); String twitterTags = getTwitterTags(transaction); notification = "Transfer started: " + transferName; if(notification.length() " |
下面的圖 3 和 圖 4 顯示了一個檔案傳輸開始和結束時所生成的 tweet:
圖 3. WebSphere MQ FTE 檔案傳輸開始
圖 4. WebSphere MQ FTE 檔案傳輸結束
本文向您展示了連線 Twitter 與 WebSphere MQ 佇列管理器或是 WebSphere MQ 應用程式是多麼容易實現以及它對於將狀態訊息廣播給感興趣的群體是多麼地有效。在企業中可以部署一個名為 StatusNet(以前被稱為 Laconica)的 Twitter-風格的開源實現,該實現使用了與 Twitter 完全相同的 API,可以讓企業能夠快速地建立並部署一個社交網路基礎設施。您可以很容易地用 Status.net 代替 Twitter 來開始釋出有關您企業工作的資訊,而同時無需擔心有任何的保密和敏感資訊被髮布到公共領域。
原文連結:http://www.ibm.com/developerworks/cn/websphere/library/techarticles/1003_cumbers/1003_cumbers.html
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/14789789/viewspace-674573/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MQ和WEBSPHERE整合 (轉)MQWeb
- 整合MQ和WEBSPHERE (轉)MQWeb
- SSM(十七) MQ應用SSMMQ
- 主流的訊息佇列MQ比較,詳解MQ的4類應用場景佇列MQ
- 在WebSphere MQ 網路上規劃 SSLWebMQ
- WebSphere MQ測試常用指令WebMQ
- websphere MQ調優淺談WebMQ
- WebSphere MQ 訊息在傳遞和排隊期間的格式變化WebMQ
- 微服務--MQ安裝(+Docker命令應用)微服務MQDocker
- 訊息佇列MQ應用場景及主流框架對比佇列MQ框架
- 漫遊MQ-socket 長連線MQ
- 新增的WebSphere MQ訊息傳遞提供程式簡介WebMQ
- 不可或缺的十種WebSphere MQ SupportPacWebMQ
- WebSphere MQ v6 日誌原理WebMQ
- 使用c#操作IBM WebSphere MQC#IBMWebMQ
- 連線IBM websphere MQ原因碼報2035的錯誤解決辦法IBMWebMQ
- 訊息佇列(MQ)佇列MQ
- 佇列mq 相關佇列MQ
- WebSphere MQ 學習筆記 - 遠端管理WebMQ筆記
- 使用 Java API 處理 WebSphere MQ 大訊息JavaAPIWebMQ
- WebSphere MQ傳輸環境搭建和測試WebMQ
- mq和rpcMQRPC
- MQ訊息佇列_RabbitMQMQ佇列
- 理解訊息佇列(MQ)佇列MQ
- 社交網路 (並查集的應用)並查集
- WebSphere MQ File Transfer Edition 中的資源監控功能WebMQ
- MQMQ
- 用SignalR建立實時永久長連線非同步網路應用程式SignalR非同步
- WebSphere MQ V7 釋出/訂閱技術WebMQ
- 獵頭職位: 500強公司急聘websphere MQ workflowWebMQ
- 在 SIBus 和 WebSphere MQ 之間進行簡單的訊息交換WebMQ
- 訊息佇列mq總結佇列MQ
- MQ 訊息佇列 比較MQ佇列
- 任務:訊息: 不可或缺的十種 WebSphere MQ SupportPacWebMQ
- MIMX8MQ5CVAHZAB 設計用於滿足智慧裝置應用MQ
- MQ和feign的區別MQ
- 高可用服務 AHAS 在訊息佇列 MQ 削峰填穀場景下的應用佇列MQ
- MQ 如何防止訊息重複入隊MQ