JMS-mq-点对点

1,修改Tomcat配置,并启动

文件:apache-tomcat-7.0.56-Idea\conf\context.xml
添加:

<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" />

2,启动MQ,监听Tomcat中的61616端口
文件:apache-activemq-5.13.0\bin\activemq.bat
管理:http://localhost:8161/admin/queues.jsp

3,部署Mq项目

[1],发送消息
http://localhost:8080/Mq/Send

消息内容:
Message send :ActiveMQTextMessage {commandId = 0, responseRequired = false, messageId = ID:WWH-PC-62504-1488880588551-1:1:1:1:1, originalDestination = null, originalTransactionId = null, producerId = null, destination = queue://TomcatQueue, transactionId = null, expiration = 0, timestamp = 1488880588941, arrival = 0, brokerInTime = 0, brokerOutTime = 0, correlationId = null, replyTo = null, persistent = false, type = null, priority = 4, groupID = null, groupSequence = 0, targetConsumerId = null, compressed = false, userID = null, content = null, marshalledProperties = null, dataStructure = null, redeliveryCounter = 0, size = 0, properties = null, readOnlyProperties = false, readOnlyBody = false, droppable = false, jmsXGroupFirstForConsumer = false, text = Helo world !}

[2],接受消息
http://localhost:8080/Mq/Receive

消息内容:
Message receive :ActiveMQTextMessage {commandId = 5, responseRequired = false, messageId = ID:WWH-PC-62504-1488880588551-1:1:1:1:1, originalDestination = null, originalTransactionId = null, producerId = ID:WWH-PC-62504-1488880588551-1:1:1:1, destination = queue://TomcatQueue, transactionId = null, expiration = 0, timestamp = 1488880588941, arrival = 0, brokerInTime = 1488880588943, brokerOutTime = 1488880714774, correlationId = null, replyTo = null, persistent = false, type = null, priority = 4, groupID = null, groupSequence = 0, targetConsumerId = null, compressed = false, userID = null, content = [email protected], marshalledProperties = null, dataStructure = null, redeliveryCounter = 0, size = 0, properties = null, readOnlyProperties = true, readOnlyBody = true, droppable = false, jmsXGroupFirstForConsumer = false, text = Helo world !}

4,代码

【1】消息发送

package com.mq.core;

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 = 1257616635024046695L;

    public Send(){
        super();
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        PrintWriter out = resp.getWriter();
        try{

            //1-初始化上下文Context
            InitialContext context = new InitialContext();

            //2-查找队列对象  (早在Tomcat的context.xml配置的队列)
            Queue queue = (Queue) context.lookup("java:comp/env/queue/queue0");
            //3-查找连接工厂对象
            QueueConnectionFactory quConnectionFactory = (QueueConnectionFactory) context.lookup("java:comp/env/queue/connectionFactory");
            //4-获取连接
            QueueConnection quConnection = quConnectionFactory.createQueueConnection();
            //5-创建队列Session
            QueueSession quSession = quConnection.createQueueSession(false, Session.DUPS_OK_ACKNOWLEDGE);

            //6-创建发送者
            QueueSender quSender = quSession.createSender(queue);
            quSender.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
            //7-创建发送内容
            TextMessage teMessage = quSession.createTextMessage("Helo world !");

            //8-消息发送
            quSender.send(teMessage);
            out.write("Message send :" + teMessage);

            //9-关闭连接
            quConnection.close();
        }catch(Throwable e){
            e.printStackTrace();
        }
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

    }

}

【2】消息接收

package com.mq.core;

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{

    /**
     *
     */
    private static final long serialVersionUID = -8933907441633969743L;

    public Receive(){
        super();
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        PrintWriter out = resp.getWriter();
        try{

            InitialContext context = new InitialContext();
            Queue queue = (Queue) context.lookup("java:comp/env/queue/queue0");
            QueueConnectionFactory quConnectionFactory = (QueueConnectionFactory) context.lookup("java:comp/env/queue/connectionFactory");
            QueueConnection quConnection = quConnectionFactory.createQueueConnection();
            QueueSession quSession = quConnection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
            QueueReceiver quReceiver = quSession.createReceiver(queue);

            quConnection.start();
            TextMessage txMessage = (TextMessage) quReceiver.receive();
            out.write("Message receive :" + txMessage);
            quConnection.close();
        }catch(Throwable e){
            e.printStackTrace();
        }
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

    }

}

参考:http://www.cnblogs.com/chenpi/p/5565618.html

时间: 2024-10-05 04:09:17

JMS-mq-点对点的相关文章

基于Tomcat + JNDI + ActiveMQ实现JMS的点对点消息传送

写了一个简单的JMS例子,之所以使用JNDI 是出于通用性考虑,该例子使用JMS规范提供的通用接口,没有使用具体JMS提供者的接口,这样可以保证我们编写的程序适用于任何一种JMS实现(ActiveMQ.HornetQ...). 什么是JNDI JNDI(Java Naming and Directory Interface)是一个标准规范,类似于JDBC,JMS等规范,为开发人员提供了查找和访问各种命名和目录服务的通用.统一的接口.J2EE 规范要求所有 J2EE 容器都要提供 JNDI 规范的

spring监听与IBM MQ JMS整合

spring xml 的配置: 文件名:applicationContext-biz-mq.xml [html] view plain copy print? <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001

JMS与MQ详解

<一> 1.ActiveMQ概述     企业消息软件从80年代起就存在,它不只是一种应用间消息传递风格,也是一种集成风格.因此,消息传递可以满足应用间的通知和互相操作.但是开源的解决方案是到最近10年才出现的.Apache ActiveMQ就是其中一种.它使应用间能以异步,松耦合方式交流.ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线. ?   ActiveMQ是Apache软件基金下的一个开源软件,它遵循JMS规范(Java Message Service),是消息

消息中间件和JMS介绍(一)

在一个公司创立初期,他可能只有几个应用,系统之间的关联也不是那么大,A系统调用B系统就直接调用B提供的API接口:后来这个公司做大了,他一步步发展有了几十个系统,这时候A系统要调用B系统的接口,但是B系统前几天刚改了一下接口A并不知情.所以A发现调不通于是给B系统管理员打电话,小王啊,改了接口咋不告诉我呢.我还以为我们系统出错了呢.弄得小王一顿尴尬,我这自己改个东西还的通知这个通知那个的. 1 中间件介绍 我们看到上面的故事中的小王他真的是很累啊.自己修改一个接口还的给所有调用接口的系统管理员打

消息中间件与JMS标准

初识消息中间件 维基百科上对于消息中间件的定义是"Message-oriented middleware(MOM) is software infrastructure focused on sending and receiving messages between distrubuted systems".解释起来就是消息中间件是在分布式系统中完成消息的发送和传递的基础软件.看张图来更直观地理解消息中间件: 看到消息中间件有两个好处: 1.异步 2.解耦 应用A和应用B都和消息中间

JMS发布/订阅消息传送例子

阅读目录 前言 在Tomcat中配置JNDI 在Web工厂中编写代码 参考资料 前言 基于上篇文章"基于Tomcat + JNDI + ActiveMQ实现JMS的点对点消息传送"很容易就可以编写一个发布/订阅消息传送例子,相关环境准备与该篇文章基本类似,主要的区别如下. 在Tomcat中配置JNDI 配置连接工厂和话题 <Resource name="topic/connectionFactory" auth="Container" ty

JMS概述

[1.面向消息的中间件]顾名思义,面向消息的中间件就是通过使用消息(而不是命令)将企业内的组件连接起来的系统.例如库存系统可能会与工资和会计系统进行通信,如果使用面向消息的中间件将他们连接在一起,就可以在任何时候关闭任何系统,发送到这个系统的消息会放在队列中,知道系统恢复工作,这样就可以在平台,语言,API和时间方面对系统进行松散耦合. [2.JMS ]JMS即JAVA消息服务,在JMS中JMS消息并不同应用直接交互,而是同JMS服务器的目的地(destination)进行交互.对应发送消息的应

基于JMS的消息传送

简单的介绍下基于JMS的消息传送 Java消息队列JMS整体设计结构 基本要素:生产者(producer),消费者(consumere),消息服务(broker) 交互模型: JMS两种消息传送模式 点对点(Point-to-Point):专门用于使用队列Queue传送消息: 发布/订阅(Publish/Subscribe):专门用于使用主题Topic传送消息 两种传送方式比较 基于队列Queue的点对点消息只能被一个消费者消费,如多个消费者都注册到同一个消息队列上,当生产者发送一条消息后,而只

消息队列(MQ)

什么是消息队列 消息队列,即MQ,Message Queue. 消息队列是典型的:生产者.消费者模型.生产者不断向消息队列中生产消息,消费者不断的从队列中获取消息.因为消息的生产和消费都是异步的,而且只关心消息的发送和接收,没有业务逻辑的侵入,这样就实现了生产者和消费者的解耦. 结合前面所说的问题: 商品服务对商品增删改以后,无需去操作索引库或静态页面,只是发送一条消息,也不关心消息被谁接收. 搜索服务和静态页面服务接收消息,分别去处理索引库和静态页面. 如果以后有其它系统也依赖商品服务的数据,

ActiveMQ 即时通讯服务 浅析

一. 概述与介绍 ActiveMQ 是Apache出品,最流行的.功能强大的即时通讯和集成模式的开源服务器.ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provider实现.提供客户端支持跨语言和协议,带有易于在充分支持JMS 1.1和1.4使用J2EE企业集成模式和许多先进的功能. 二. 特性 1. 多种语言和协议编写客户端.语言: Java.C.C++.C#.Ruby.Perl.Python.PHP.应用协议:OpenWire.Stomp REST.WS N