房产网站建设的功能,智能建站软件哪个好,苏州专业网站设计公司,程序员帮忙做放贷网站前言之所以使用JNDI 是出于通用性考虑#xff0c;该例子使用JMS规范提供的通用接口#xff0c;没有使用具体JMS提供者的接口#xff0c;这样可以保证我们编写的程序适用于任何一种JMS实现(ActiveMQ、HornetQ等)。什么是JNDI#xff1a;JNDI(Java Naming and Directory Inte…前言之所以使用JNDI 是出于通用性考虑该例子使用JMS规范提供的通用接口没有使用具体JMS提供者的接口这样可以保证我们编写的程序适用于任何一种JMS实现(ActiveMQ、HornetQ等)。什么是JNDIJNDI(Java Naming and Directory Interface)是一个标准规范类似于JDBCJMS等规范为开发人员提供了查找和访问各种命名和目录服务的通用、统一的接口。J2EE 规范要求所有 J2EE 容器都要提供 JNDI 规范的实现因此Tomcat就实现了JNDI 规范。PTP(Point to point)消息模式(JMS的点对点消息传送)1、使用Tomcat配置JNDI找到Tomcat安装路径下的conf文件夹打开context.xml添加如下配置View Code2、启动ActiveMQ3、编写一个Web工程Eclipse上新建web工程添加ActiveMQ依赖的jar包然后开始编写两个Servlet一个用于生产消息另一个用于消费消息如下代码消息生产者Servletimport 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 contextInitialContext context newInitialContext();//lookup the queue objectQueue queue (Queue) context.lookup(java:comp/env/queue/queue0);//lookup the queue connection factoryQueueConnectionFactory conFactory (QueueConnectionFactory) context.lookup(java:comp/env/queue/connectionFactory);//create a queue connectionQueueConnection queConn conFactory.createQueueConnection();//create a queue sessionQueueSession queSession queConn.createQueueSession(false,Session.DUPS_OK_ACKNOWLEDGE);//create a queue senderQueueSender queSender queSession.createSender(queue);queSender.setDeliveryMode(DeliveryMode.NON_PERSISTENT);//create a simple message to say Hello WorldTextMessage message queSession.createTextMessage(Hello World);//send the messagequeSender.send(message);//print what we didout.write(Message Sent: message.getText());//close the queue connectionqueConn.close();}catch(Exception e) {//TODO Auto-generated catch blocke.printStackTrace();}}/*** see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse* response)*/protected voiddoPost(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {//TODO Auto-generated method stub}}View Code消息消费者Servletimport 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 contextInitialContext context newInitialContext();//lookup the queue objectQueue queue (Queue) context.lookup(java:comp/env/queue/queue0);//lookup the queue connection factoryQueueConnectionFactory conFactory (QueueConnectionFactory) context.lookup(java:comp/env/queue/connectionFactory);//create a queue connectionQueueConnection queConn conFactory.createQueueConnection();//create a queue sessionQueueSession queSession queConn.createQueueSession(false,Session.AUTO_ACKNOWLEDGE);//create a queue receiverQueueReceiver queReceiver queSession.createReceiver(queue);//start the connectionqueConn.start();//receive a messageTextMessage message (TextMessage) queReceiver.receive();//print the messageout.write(Message Received: message.getText());//close the queue connectionqueConn.close();}catch(Exception e) {//TODO Auto-generated catch blocke.printStackTrace();}}/*** see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse* response)*/protected voiddoPost(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {//TODO Auto-generated method stub}}View Code4、验证结果在Tomcat里运行该Web工程执行消息生产者Servlet返回消息发送成功标志同时我们可以在http://localhost:8161/admin/queues.jsp查看到该消息如下图所示继续执行消息消费者Servlet返回消息接收成功标志同时我们可以打开http://localhost:8161/admin/queues.jsp页面发现刚才的消息已经不见了如下图所示Pub/Sub消息模式(JMS发布/订阅消息传送)1、在Tomcat中配置JNDI配置连接工厂和话题:View Code2、启动ActiveMQ3、在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 contextInitialContext ctx newInitialContext();//lookup the topic objectTopic topic (Topic) ctx.lookup(java:comp/env/topic/topic0);//lookup the topic connection factoryTopicConnectionFactory connFactory (TopicConnectionFactory) ctx.lookup(java:comp/env/topic/connectionFactory);//create a topic connectionTopicConnection topicConn connFactory.createTopicConnection();//create a topic sessionTopicSession topicSession topicConn.createTopicSession(false,Session.AUTO_ACKNOWLEDGE);//create a topic publisherTopicPublisher topicPublisher topicSession.createPublisher(topic);topicPublisher.setDeliveryMode(DeliveryMode.NON_PERSISTENT);//create the Hello World messageTextMessage message topicSession.createTextMessage();message.setText(Hello World);//publish the messagestopicPublisher.publish(message);//print what we didout.write(Message published: message.getText());//close the topic connectiontopicConn.close();}catch(Exception e) {//TODO Auto-generated catch blocke.printStackTrace();}}/*** see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse* response)*/protected voiddoPost(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {//TODO Auto-generated method stub}}View Code新建一个订阅者Servletpackage 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 contextInitialContext ctx newInitialContext();//lookup the topic objectTopic topic (Topic) ctx.lookup(java:comp/env/topic/topic0);//lookup the topic connection factoryTopicConnectionFactory connFactory (TopicConnectionFactory) ctx.lookup(java:comp/env/topic/connectionFactory);//create a topic connectionTopicConnection topicConn connFactory.createTopicConnection();//create a topic sessionTopicSession topicSession topicConn.createTopicSession(false,Session.AUTO_ACKNOWLEDGE);//create a topic subscriberTopicSubscriber topicSubscriber topicSession.createSubscriber(topic);//start the connectiontopicConn.start();//receive the messageTextMessage message (TextMessage) topicSubscriber.receive();//print the messageout.write(Message received: message.getText());//close the topic connectiontopicConn.close();}catch(Exception e) {//TODO Auto-generated catch blocke.printStackTrace();}}/*** see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse* response)*/protected voiddoPost(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {//TODO Auto-generated method stub}}View Code4、验证结果运行Web工程分别打开多个标签访问订阅servlet然后访问发布servlet结果如下在订阅者订阅消息的时候一开始没接收到消息一旦发布者发布消息后订阅者马上收到消息。