导出 (0) 打印
全部展开

如何将 Azure 中的 JMS with AMQP 1.0 与 Eclipse 配合使用

更新时间: 2015年3月

高级消息队列协议 (AMQP) 1.0 是一个高效、可靠的线级消息传送协议,可用于构建强大、跨平台的消息传送应用程序。Azure Service Bus 中已添加 AMQP 1.0 支持作为一项预览功能。以下步骤说明如何在使用 Azure Toolkit for Eclipse(由 Microsoft Open Technologies 开发)部署到 Azure 的基本 JSP 应用程序中,将 Java 消息服务 (JMS) 与 AMQP 1.0 配合使用。

  1. 创建动态 Web 项目:在 Eclipse 中的菜单上,依次单击“文件”新建“动态 Web 项目”。(在 Eclipse 中为 Azure 创建 Hello World 应用程序中提供了创建动态 Web 项目的更详细步骤。)

  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. 将“适用于 JMS 的 Apache Qpid 客户端库包(由 MS Open Tech 开发)”添加到动态 Web 项目的生成路径和部署程序集:

    1. 在 Eclipse 的项目资源管理器中,打开动态 Web 项目的上下文菜单,然后单击“属性”。

    2. “属性”对话框的左侧窗格中,单击“Java 生成路径”

    3. 在“Java 生成路径”对话框中,单击“库”选项卡,单击“添加库”,选择“适用于 JMS 的 Apache Qpid 客户端库包(由 MS Open Tech 开发)”,然后单击“下一步”。

    4. 在“添加库”对话框中,确保已选中“包含在项目部署程序集中”。

    5. 单击“完成”关闭“添加库”对话框。

    6. 单击“确定”以关闭“属性”对话框。

  6. 创建应用程序的 Azure 项目:在 Eclipse 的项目资源管理器中,打开动态 Web 项目的上下文菜单,单击“Azure”,然后单击“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
    

    使用你的 Service Bus 命名空间名称代替 your_namespace,使用你的 Service Bus 访问密钥代替 your_url_encoded_key。请注意,在 servicebus.properties 中,Service Bus 密钥需要进行 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。输入一条消息,然后单击“发送消息”以查看结果。

Microsoft 正在进行一项网上调查,以了解您对 MSDN 网站的意见。 如果您选择参加,我们将会在您离开 MSDN 网站时向您显示该网上调查。

是否要参加?
显示:
© 2015 Microsoft