日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java tomcat jms_JavaWeb之使用Tomcat、JNDI与ActiveMQ实现JMS消息通信服务

發布時間:2023/12/10 java 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java tomcat jms_JavaWeb之使用Tomcat、JNDI与ActiveMQ实现JMS消息通信服务 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

之所以使用JNDI 是出于通用性考慮,該例子使用JMS規范提供的通用接口,沒有使用具體JMS提供者的接口,這樣可以保證我們編寫的程序適用于任何一種JMS實現(ActiveMQ、HornetQ等)。

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

PTP(Point to point)消息模式(JMS的點對點消息傳送)

1、使用Tomcat配置JNDI

找到Tomcat安裝路徑下的conf文件夾,打開context.xml,添加如下配置:

View Code

2、啟動ActiveMQ

3、編寫一個Web工程

Eclipse上新建web工程,添加ActiveMQ依賴的jar包,然后開始編寫兩個Servlet,一個用于生產消息,另一個用于消費消息,如下代碼:

消息生產者Servlet:

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;/**

* Servlet implementation class JMSTest*/@WebServlet("/Send")public classSend extends HttpServlet {private static final long serialVersionUID = 1L;/**

* @see HttpServlet#HttpServlet()*/

publicSend() {

super();//TODO Auto-generated constructor stub

}/**

* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse

* response)*/

protected voiddoGet(HttpServletRequest request,

HttpServletResponse response) throws ServletException, IOException {

PrintWriterout =response.getWriter();try{//get the initial context

InitialContext context = newInitialContext();//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.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 Sent:" +message.getText());//close the queue connection

queConn.close();

}catch(Exception e) {//TODO Auto-generated catch block

e.printStackTrace();

}

}/**

* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse

* response)*/

protected voiddoPost(HttpServletRequest request,

HttpServletResponse response) throws ServletException, IOException {//TODO Auto-generated method stub

}

}

View Code

消息消費者Servlet:

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;/**

* Servlet implementation class Receive*/@WebServlet("/Receive")public classReceive extends HttpServlet {private static final long serialVersionUID = 1L;/**

* @see HttpServlet#HttpServlet()*/

publicReceive() {

super();//TODO Auto-generated constructor stub

}/**

* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse

* response)*/

protected voiddoGet(HttpServletRequest request,

HttpServletResponse response) throws ServletException, IOException {

PrintWriterout =response.getWriter();try{//get the initial context

InitialContext context = newInitialContext();//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();

}

}/**

* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse

* response)*/

protected voiddoPost(HttpServletRequest request,

HttpServletResponse response) throws ServletException, IOException {//TODO Auto-generated method stub

}

}

View Code

4、驗證結果

在Tomcat里運行該Web工程,執行消息生產者Servlet,返回消息發送成功標志,同時我們可以在http://localhost:8161/admin/queues.jsp查看到該消息,如下圖所示

繼續執行消息消費者Servlet,返回消息接收成功標志,同時我們可以打開http://localhost:8161/admin/queues.jsp頁面,發現剛才的消息已經不見了,如下圖所示

Pub/Sub消息模式(JMS發布/訂閱消息傳送)

1、在Tomcat中配置JNDI

配置連接工廠和話題:

View Code

2、啟動ActiveMQ

3、在Web工廠中編寫代碼

新建一個發布者Servlet:

package pubSub;

import java.io.IOException;

import java.io.PrintWriter;

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;

import javax.jms.Topic;

import javax.jms.Session;

import javax.jms.TextMessage;

import javax.jms.TopicPublisher;

import javax.jms.DeliveryMode;

import javax.jms.TopicSession;

import javax.jms.TopicConnection;

import javax.jms.TopicConnectionFactory;/**

* Servlet implementation class JMSTest*/@WebServlet("/Publish")public classPublisher extends HttpServlet {private static final long serialVersionUID = 1L;/**

* @see HttpServlet#HttpServlet()*/

publicPublisher() {

super();//TODO Auto-generated constructor stub

}/**

* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse

* response)*/

protected voiddoGet(HttpServletRequest request,

HttpServletResponse response) throws ServletException, IOException {

PrintWriterout =response.getWriter();try{//get the initial context

InitialContext ctx = newInitialContext();//lookup the topic object

Topic topic = (Topic) ctx.lookup("java:comp/env/topic/topic0");//lookup the topic connection factory

TopicConnectionFactory connFactory =(TopicConnectionFactory) ctx

.lookup("java:comp/env/topic/connectionFactory");//create a topic connection

TopicConnection topicConn =connFactory.createTopicConnection();//create a topic session

TopicSession topicSession = topicConn.createTopicSession(false,

Session.AUTO_ACKNOWLEDGE);//create a topic publisher

TopicPublisher topicPublisher =topicSession.createPublisher(topic);

topicPublisher.setDeliveryMode(DeliveryMode.NON_PERSISTENT);//create the "Hello World" message

TextMessage message =topicSession.createTextMessage();

message.setText("Hello World");//publish the messages

topicPublisher.publish(message);//print what we did

out.write("Message published:" +message.getText());//close the topic connection

topicConn.close();

}catch(Exception e) {//TODO Auto-generated catch block

e.printStackTrace();

}

}/**

* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse

* response)*/

protected voiddoPost(HttpServletRequest request,

HttpServletResponse response) throws ServletException, IOException {//TODO Auto-generated method stub

}

}

View Code

新建一個訂閱者Servlet:

package pubSub;

import java.io.IOException;

import java.io.PrintWriter;

import javax.jms.Session;

import javax.jms.TextMessage;

import javax.jms.Topic;

import javax.jms.TopicConnection;

import javax.jms.TopicConnectionFactory;

import javax.jms.TopicSession;

import javax.jms.TopicSubscriber;

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;/**

* Servlet implementation class Receive*/@WebServlet("/Subscribe")public classSubscriber extends HttpServlet {private static final long serialVersionUID = 1L;/**

* @see HttpServlet#HttpServlet()*/

publicSubscriber() {

super();//TODO Auto-generated constructor stub

}/**

* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse

* response)*/

protected voiddoGet(HttpServletRequest request,

HttpServletResponse response) throws ServletException, IOException {

PrintWriterout =response.getWriter();try{//get the initial context

InitialContext ctx = newInitialContext();//lookup the topic object

Topic topic = (Topic) ctx.lookup("java:comp/env/topic/topic0");//lookup the topic connection factory

TopicConnectionFactory connFactory =(TopicConnectionFactory) ctx

.lookup("java:comp/env/topic/connectionFactory");//create a topic connection

TopicConnection topicConn =connFactory.createTopicConnection();//create a topic session

TopicSession topicSession = topicConn.createTopicSession(false,

Session.AUTO_ACKNOWLEDGE);//create a topic subscriber

TopicSubscriber topicSubscriber =topicSession

.createSubscriber(topic);//start the connection

topicConn.start();//receive the message

TextMessage message =(TextMessage) topicSubscriber.receive();//print the message

out.write("Message received:" +message.getText());//close the topic connection

topicConn.close();

}catch(Exception e) {//TODO Auto-generated catch block

e.printStackTrace();

}

}/**

* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse

* response)*/

protected voiddoPost(HttpServletRequest request,

HttpServletResponse response) throws ServletException, IOException {//TODO Auto-generated method stub

}

}

View Code

4、驗證結果

運行Web工程,分別打開多個標簽訪問訂閱servlet,然后訪問發布servlet,結果如下:

在訂閱者訂閱消息的時候,一開始沒接收到消息,一旦發布者發布消息后,訂閱者馬上收到消息。

總結

以上是生活随笔為你收集整理的java tomcat jms_JavaWeb之使用Tomcat、JNDI与ActiveMQ实现JMS消息通信服务的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。