ActiveMQ入門

  • 準備好ActiveMQ
  1. 官網下載ActiveMQ: http://activemq.apache.org/download.html
  2. 下載之後,解壓縮到當前目錄,進入到解壓縮後的目錄中/bin/,執行activemq start 命令啓動ActiveMQ,打開瀏覽器,輸入http://localhost:8161/admin/ 進入ActiveMQ管理頁面,默認有兩個登錄用戶admin user 密碼賬號一樣,如需修改,可以到ActiveMQ目錄下的conf/ 目錄下,打開jetty-realm.properties文件設置。

ActiveMQ默認的端口是8161,至此,ActiveMQ安裝好。

 

  • 設置Tomcat容器中隊列相關參數

  進入Tomcat安裝目錄,進入conf/ 目錄打開context.xml,在<Context>標籤中添加兩個<Resource>標籤,一個是ActiveMQ消息隊列的連接工廠,一個是消息隊列的隊列名稱

<Resource name="queue/connectionFactory"    

                auth="Container"    

                type="org.apache.activemq.ActiveMQConnectionFactory"  

                description="JMS Connection Factory"  

                factory="org.apache.activemq.jndi.JNDIReferenceFactory"  

                brokerURL="tcp://localhost:61616"  

                brokerName="LocalActiveMQBroker" />  

<Resource name="queue/queue0"    

                auth="Container"    

                type="org.apache.activemq.command.ActiveMQQueue"  

                description="My Queue"  

                factory="org.apache.activemq.jndi.JNDIReferenceFactory"  

                physicalName="TomcatQueue" />

配置完畢,關閉結束。

 

JNDI(Java Naming and Directory Interface)是一個標準規範,類似於JDBC,JMS等規範,爲開發人員提供了查找和訪問各種命名和目錄服務的通用、統一的接口。J2EE 規範要求所有 J2EE 容器都要提供 JNDI 規範的實現,因此Tomcat就實現了JNDI 規範。

上面的操作就是配置Tomcat的JNDI。

 

  • 開發消息隊列的web應用,使用Tomcat運行。

開發IDE:Eclipse,

  1. 設置Eclipse中的服務器爲本地自己安裝的Tomcat,也就是上面配置了Resource標籤的那個Tomcat。步驟如下圖

  1. 創建Maven工程,選擇archetypes爲webapp,項目名稱爲ActiveMQDemo,打開pom.xml文件添加ActiveMQ的依賴:

    <dependency>

        <groupId>org.apache.activemq</groupId>

        <artifactId>activemq-all</artifactId>

        <version>5.15.8</version>

   </dependency>

創建消息生產者servlet類:

package com.test.activemq;

import java.io.IOException;
import java.io.PrintWriter;

import javax.jms.DeliveryMode;
import javax.jms.Queue;
import javax.jms.QueueConnection;
import javax.jms.QueueConnectionFactory;
import javax.jms.QueueSender;
import javax.jms.QueueSession;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.naming.InitialContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/Send")
public class Send extends HttpServlet {
    
    private static final long serialVersionUID = 1L;
    
    public Send() {
        super();
        // TODO Auto-generated constructor stub
    }
    
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        PrintWriter out = resp.getWriter();
        try{
            // get the initial context
            InitialContext context = new InitialContext();
            
            // lookup the queue object
            Queue queue = (Queue) context.lookup("java:comp/env/queue/queue0");
            
            // lookup the queue connection factory
            QueueConnectionFactory conFactory = (QueueConnectionFactory) context.lookup("java:comp/env/queue/connectionFactory");
            
            // create a connection
            QueueConnection queueConn = conFactory.createQueueConnection();
            
            // create a queue session
            QueueSession queSession = queueConn.createQueueSession(false,Session.DUPS_OK_ACKNOWLEDGE);
            
            // create a queue sender
            QueueSender queSender = queSession.createSender(queue);
            queSender.setDeliveryMode(DeliveryMode.NON_PERSISTENT);

            // create a simple message to say "Hello World"
            TextMessage message = queSession.createTextMessage("Hello World");

            // send the message
            queSender.send(message);

            // print what we did
            out.write("Message Send: " + message.getText());

            // close the queue connection
            queueConn.close();
        } catch(Exception e){
            e.printStackTrace();
        }
    }
    
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // TODO Auto-generated method stub
        super.doPost(req, resp);
    }
    
}
 

創建消息消費者servlet類

package com.test.activemq;

import java.io.IOException;
import java.io.PrintWriter;

import javax.jms.Queue;
import javax.jms.QueueConnection;
import javax.jms.QueueConnectionFactory;
import javax.jms.QueueReceiver;
import javax.jms.QueueSession;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.naming.InitialContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/Receive")
public class Receive extends HttpServlet {

    public Receive() {
        super();
    }
    
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        PrintWriter out = resp.getWriter();

        try {
            // get the initial context
            InitialContext context = new InitialContext();

            // lookup the queue object
            Queue queue = (Queue) context.lookup("java:comp/env/queue/queue0");

            // lookup the queue connection factory
            QueueConnectionFactory conFactory = (QueueConnectionFactory) context
                    .lookup("java:comp/env/queue/connectionFactory");

            // create a queue connection
            QueueConnection queConn = conFactory.createQueueConnection();

            // create a queue session
            QueueSession queSession = queConn.createQueueSession(false,
                    Session.AUTO_ACKNOWLEDGE);

            // create a queue receiver
            QueueReceiver queReceiver = queSession.createReceiver(queue);

            // start the connection
            queConn.start();

            // receive a message
            TextMessage message = (TextMessage) queReceiver.receive();

            // print the message
            out.write("Message Received: " + message.getText());

            // close the queue connection
            queConn.close();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // TODO Auto-generated method stub
        super.doPost(req, resp);
    }
}
 

  1. 將項目部署到Tomcat

File-->New-->Other,搜索Server,然後點next,直到下面彈框出現,按步驟操作最後finish,

點擊Windows-->Show View-->Other,搜索Server,出現Server工作臺,選擇創建好的TomcatServer,右鍵啓動。http://localhost/ActiveMQDemo 訪問到這個項目的首頁,http://localhost/ActiveMQDemo/Send生成消息到ActiveMQ,http://localhost/ActiveMQDemo/Receive獲取一個ActiveMQ消息。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章