本頁是否能提供幫助?
您對此內容的意見反應十分重要。 請告訴我們您的想法。
其他意見反應?
剩餘 1500 個字元
匯出 (0) 列印
全部展開

如何在具備 Eclipse 的 Azure 中搭配使用 JMS 與 AMQP 1.0

更新日期: 2015年3月

進階訊息佇列通訊協定 (AMQP) 1.0 是一個有效率且可靠的有線等級訊息通訊協定,可用來建置強大的跨平台訊息應用程式。AMQP 1.0 支援已做為預覽功能加入至 Azure 服務匯流排。下列步驟說明如何在已使用 Azure Toolkit for Eclipse (由 Microsoft Open Technologies 提供) 部署至 Azure 的基本 JSP 應用程式中,搭配使用 Java Message Service (JMS) 與 AMQP 1.0。

  1. 建立動態 Web 專案:在 Eclipse 內,於功能表上依序按一下 [檔案]、[新增] 及 [動態 Web 專案](如需更詳細的建立動態 Web 專案步驟,請參閱在 Eclipse 中建立 Azure 的 Hello World 應用程式)。

  2. 將名為 index.jsp 的 JSP 檔案加入至動態 Web 專案。將下列程式碼用於 index.jsp。

    <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
        pageEncoding="ISO-8859-1"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <title>AMQP 1.0 message sender</title>
    </head>
    <form method="post" action="sendMessages.jsp">
    <br/>
    This sample sends a message to a queue.
    <br/><br/>
    Enter your message: <input type="text" name="message" />
    <input type="submit" name="submit" value="Send Message" />
    </form>
    </html>
    
  3. 將名為 sendMessages.jsp 的 JSP 檔案加入至動態 Web 專案。將下列程式碼用於 sendMessages.jsp。

    <%@ page import="myAMQPPackage.MyAMQPSender" language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <title>AMQP 1.0 page 2</title>
    </head>
    <body>
    <%
        out.print("Sending message -------> " + request.getParameter("message") );
        out.print("<br/>");
    
        try 
        {
            // Send the message.
            MyAMQPSender.postMessages(request.getParameter("message"));
            out.println("Message sent successfully\n");
        }
        catch (Exception e) 
        {
            out.println("Error occurred while sending message to queue.\n");
            out.println(e);
        }
    %>
    </body>
    </html>
    
  4. 為您的動態 Web 專案建立 Java 類別 MyAMQPSender。基於本教學課程的目的,將其所屬的封裝命名為 myAMQPPackage。將下列程式碼用於 MyAMQPSender.java

    package myAMQPPackage;
    
    import javax.jms.*;
    import javax.naming.Context;
    import javax.naming.InitialContext;
    import java.util.Hashtable;
    
    public class MyAMQPSender
    {
        
        private static Connection connection;
        private static Session sendSession;
        private static MessageProducer sender;
        private static Context context;
        
        
        public static void postMessages(String textMessage) throws Exception
        {
            try
            {
                init();
                sendTextMessage(textMessage);
                close();
            }
            catch (Exception e)
            {
                System.out.println("Exception: " + e);
            }
        }
    
        private static void sendTextMessage(String textMessage) throws JMSException 
        {
            TextMessage message = sendSession.createTextMessage();
            message.setText(textMessage);
            sender.send(message);
            System.out.println("Sent message with JMSMessageID = " + message.getJMSMessageID());
        }
        
        private static void init() 
        {
            try
            {
                // Configure JNDI environment
                Hashtable<String, String> env = new Hashtable<String, String>();
                env.put(Context.INITIAL_CONTEXT_FACTORY,
                "org.apache.qpid.amqp_1_0.jms.jndi.PropertiesFileInitialContextFactory");
                env.put(Context.PROVIDER_URL, "servicebus.properties");
                context = new InitialContext(env);
        
                // Lookup ConnectionFactory and Queue
                ConnectionFactory cf = (ConnectionFactory) context.lookup
                        ("SBCONNECTIONFACTORY");
                Destination queue = (Destination) context.lookup("QUEUE");
        
                // Create Connection
                connection = cf.createConnection();
        
                // Create sender-side Session and MessageProducer
                sendSession = connection.createSession(false,
                        Session.AUTO_ACKNOWLEDGE);
                sender = sendSession.createProducer(queue);
            }
            catch (Exception e)
            {
                System.out.println("Exception: " + e);
            }
        }
    
        private static void close() throws JMSException 
        {
            sender.close();
            sendSession.close();
            connection.close();
        }
    }
    
  5. 將 [Package for Apache Qpid Client Libraries for JMS (由 MS Open Tech 提供)] 程式庫加入至動態 Web 專案的組建路徑和部署組件:

    1. 在 Eclipse 的 [專案總管] 中,開啟動態 Web 專案的內容功能表,然後按一下 [屬性]。

    2. 在左窗格的 [屬性] 對話方塊中按一下 [Java 組建路徑]

    3. 在 [Java 組建路徑] 對話方塊中,按一下 [程式庫] 索引標籤,按一下 [新增程式庫],選取 [Package for Apache Qpid Client Libraries for JMS (由 MS Open Tech 提供)],然後按 [下一步]。

    4. 在 [新增程式庫] 對話方塊中,確定已選取 [納入專案部署組件中]。

    5. 按一下 [完成] 關閉 [新增程式庫] 對話方塊。

    6. 按一下 [確定] 關閉 [屬性] 對話方塊。

  6. 為您的應用程式建立 Azure 專案:在 Eclipse 的 [專案總管] 中,開啟動態 Web 專案的內容功能表,按一下 [Azure],然後按一下 [Package for Azure]。在 [Azure 部署專案] 對話方塊中提供欄位值,然後按一下 [完成]。(如需此對話方塊的詳細指示,請參閱在 Eclipse 中建立 Azure 的 Hello World 應用程式)。

  7. 建立名為 servicebus.properties 的檔案。您可以挑選任何本機資料夾,此檔案將會新增為下一個步驟中的元件。

    將下列內容用於 servicebus.properties。

    # Register a ConnectionFactory in JNDI using the form:
    # connectionfactory.[jndiname] = [ConnectionURL]
    connectionfactory.SBCONNECTIONFACTORY = \
      amqps://owner:your_url_encoded_key@your_namespace.servicebus.windows.net
    
    # Register some queues in JNDI using the form:
    # queue.[jndiName] = [physicalName]
    queue.QUEUE = your_queue
    

    使用您的服務匯流排命名空間名稱取代 your_namespace,並使用您的服務匯流排存取金鑰取代 your_url_encoded_key。請注意,在 servicebus.properties 中,服務匯流排金鑰需要經過 URL 編碼。建立 URL 編碼的其中一種技巧就是透過 http://www.w3schools.com/tags/ref_urlencode.asp 網站。

    使用您建立的佇列名稱取代 your_queue。此外,如果您的簽發者不是 owner,也要在 connectionfactory.SBCONNECTIONFACTORY 字串中進行修改。

    如需有關 servicebus.properties 的詳細資訊,請參閱 http://www.windowsazure.com/en-us/develop/java/how-to-guides/service-bus-amqp/

  8. 將 servicebus.properties 新增為您的背景工作角色的元件:

    1. 在 Eclipse 的 [專案總管] 中,展開 Azure 專案,開啟 WorkerRole1 的內容功能表,按一下 [Azure],然後按一下 [元件]。

    2. 在 [元件] 對話方塊中,按一下 [新增]。

    3. 在 [匯入] 之下的 [新增元件] 對話方塊中,針對 [從路徑],按一下 [檔案],然後選取 servicebus.properties 檔案。

    4. 針對 [匯入]方法使用 [複製]。

    5. 針對 [做為名稱],使用 servicebus.properties,這將成為您按一下文字方塊時的預設值。

    6. 在 [部署] 之下的 [新增元件] 對話方塊中,針對 [方法],使用 [複製]。

    7. 針對 [至目錄],使用 %CATALINA_HOME%\bin

    8. 按一下 [確定] 關閉 [加入元件] 對話方塊,然後再按一下 [確定] 關閉 [元件] 對話方塊。

  9. 如果您使用 Windows 做為作業系統,按一下 Eclipse 的 Azure 工具列中的 [在 Azure 模擬器中執行] 圖示,即可在計算模擬器中執行您的應用程式。在計算模擬器中執行應用程式之後,啟動您的應用程式的 localhost URL。輸入訊息,然後按一下 [傳送訊息] 即可查看結果。

  10. 若要在 Azure 中執行您的應用程式,請按一下 Azure 工具列中的 [發行到 Azure 雲端] 圖示,並遵循系統提示以完成部署。(如需有關部署至 Azure 的詳細資訊,請參閱在 Eclipse 中建立 Azure 的 Hello World 應用程式)。在應用程式做為 Azure 雲端服務執行之後,啟動您的應用程式的 URL。輸入訊息,然後按一下 [傳送訊息] 即可查看結果。

顯示:
© 2015 Microsoft