用社交網路連線 WebSphere MQ:列隊管理器和 MQ 應用程式的 Twitter 通知

CloudSpace發表於2010-09-21
Rich Cumbers, 軟體開發人員,WebSphere MQ File Transfer Edition, IBM

簡介: 如今,社交網路無所不在 —— 為了與朋友聯絡,或是為了讓自己與時俱進,抑或是為了讓別人獲知共同關心話題的最新進展。社交網路在企業中也很有用。本文將向您展示如何快速而輕鬆地在您的 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 檔案

Twitter API

很多 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();
         }
   }
}	

簡單的文字訊息 MDB

使用簡單的文字訊息,可以快速地將 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 帳戶上的輸出:


圖 1. 簡單的文字訊息作為一個 tweet
簡單的文字訊息 tweet

MQ 事件訊息 MDB

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 中所示的是當建立一個佇列時所生成的一個輸出示例:


圖 2. 佇列建立事件訊息作為一個 tweet
佇列建立事件作為一個 tweet

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 檔案傳輸開始
WebSphere MQ FTE 檔案傳輸開始

圖 4. WebSphere MQ FTE 檔案傳輸結束
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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章