- 準備好ActiveMQ
- 官網下載ActiveMQ: http://activemq.apache.org/download.html
- 下載之後,解壓縮到當前目錄,進入到解壓縮後的目錄中/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,
- 設置Eclipse中的服務器爲本地自己安裝的Tomcat,也就是上面配置了Resource標籤的那個Tomcat。步驟如下圖
- 創建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);
}
}
- 將項目部署到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消息。