博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JMS发布/订阅消息传送例子
阅读量:7237 次
发布时间:2019-06-29

本文共 5816 字,大约阅读时间需要 19 分钟。

前言

基于上篇文章""很容易就可以编写一个发布/订阅消息传送例子,相关环境准备与该篇文章基本类似,主要的区别如下。

在Tomcat中配置JNDI

配置连接工厂和话题

在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 class Publisher extends HttpServlet {    private static final long serialVersionUID = 1L;    /**     * @see HttpServlet#HttpServlet()     */    public Publisher() {        super();        // TODO Auto-generated constructor stub    }    /**     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse     *      response)     */    protected void doGet(HttpServletRequest request,            HttpServletResponse response) throws ServletException, IOException {        PrintWriter out = response.getWriter();        try {            // get the initial context            InitialContext ctx = new InitialContext();            // 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 void doPost(HttpServletRequest request,            HttpServletResponse response) throws ServletException, IOException {        // TODO Auto-generated method stub    }}

新建一个订阅者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 class Subscriber extends HttpServlet {    private static final long serialVersionUID = 1L;    /**     * @see HttpServlet#HttpServlet()     */    public Subscriber() {        super();        // TODO Auto-generated constructor stub    }    /**     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse     *      response)     */    protected void doGet(HttpServletRequest request,            HttpServletResponse response) throws ServletException, IOException {        PrintWriter out = response.getWriter();        try {            // get the initial context            InitialContext ctx = new InitialContext();            // 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 void doPost(HttpServletRequest request,            HttpServletResponse response) throws ServletException, IOException {        // TODO Auto-generated method stub    }}

运行Web工程,分别打开多个标签访问订阅servlet,然后访问发布servlet,结果如下:

在订阅者订阅消息的时候,一开始没接收到消息,一旦发布者发布消息后,订阅者马上收到消息。

转载地址:http://rcgfm.baihongyu.com/

你可能感兴趣的文章
转载:如何设计一个可扩展的用户登录系统
查看>>
python对redis的常用操作 上 (对列表、字符串、散列结构操作)
查看>>
I.MX6 i2c_data_write_byte ioctl error: I/O error
查看>>
myisam MySQL 锁问题
查看>>
为什么获取的System.Web.HttpContext.Current值为null,HttpContext对象为null时如何获取程序(站点)的根目录...
查看>>
告诉你一个真实的OpenStack:都谁在用,用来干什么?
查看>>
在idea中maven项目jdk编译version总是跳到1.5
查看>>
理解与应用css中的display属性
查看>>
升级openssl环境至openssl-1.1.0c
查看>>
javaScript判断浏览器类型
查看>>
SQL注入之SQLmap入门
查看>>
Hibernate缓存研究
查看>>
Cesium原理篇:3D Tiles(1)渲染调度
查看>>
neuroph Perceptron Sample
查看>>
关于navicat连接oracle 报 ORA-12737 set CHS16GBK错误的解决方案
查看>>
MEP自定义参数化风机盘管族
查看>>
(android控件)巧用background属性,实现图片可选择效果
查看>>
获取APK文件的签名信息,反射实现
查看>>
Hive On Spark hiveserver2方式使用
查看>>
如何在Android开发中让你的代码更有效率
查看>>