`
xfjt297857539
  • 浏览: 153087 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

使用activeMQ实现jms(zhuam)

    博客分类:
  • J2EE
 
阅读更多
使用activeMQ实现jms 


一:jms介绍
         jms说白了就是java message service,是J2EE规范的一部分,跟jdbc差不多,sun只提供了接口,由各个厂商(provider)来进行具体的实现,然后使用者使用他们的jar包进行开发使用即可。
        另外在jms的API中,jms传递消息有两种方式,一种是点对点的Queue,还有一个是发布订阅的Topic方式。区别在于:
        对于Queue模式,一个发布者发布消息,下面的接收者按队列顺序接收,比如发布了10个消息,两个接收者A,B那就是A,B总共会收到10条消息,不重复。
        对于Topic模式,一个发布者发布消息,有两个接收者A,B来订阅,那么发布了10条消息,A,B各收到10条消息。
       关于api的简单基础可以看下:http://www.javaeye.com/topic/64707,简单的参考!
二:ActiveMQ介绍
         activeMQ是apache下的一个开源jms产品,具体参见apache官方网站;
         Apache ActiveMQ is fast, supports many Cross Language Clients and Protocols, comes with easy to use Enterprise Integration Patterns and many advanced features while fully supporting JMS 1.1 and J2EE 1.4. Apache ActiveMQ is released under the Apache 2.0 License
三:开始实现代码
       1: 使用activeMQ来完成jms的发送,必须要下载activeMQ,然后再本机安装,并且启动activeMQ的服务才行。在官网下载完成之后,运行bin目录下面的activemq.bat,将activeMQ成功启动。
       启动成功之后可以运行:http://localhost:8161/admin/index.jsp  查看一下。
       2:发送端,sender

import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.DeliveryMode;
import javax.jms.Destination;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.jms.TextMessage;

import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;

public class Sender {
    private static final int SEND_NUMBER = 5;

    public static void main(String[] args) {
        // ConnectionFactory :连接工厂,JMS 用它创建连接
        ConnectionFactory connectionFactory;
        // Connection :JMS 客户端到JMS Provider 的连接
        Connection connection = null;
        // Session: 一个发送或接收消息的线程
        Session session;
        // Destination :消息的目的地;消息发送给谁.
        Destination destination;
        // MessageProducer:消息发送者
        MessageProducer producer;
        // TextMessage message;
        // 构造ConnectionFactory实例对象,此处采用ActiveMq的实现jar

        connectionFactory = new ActiveMQConnectionFactory(
                ActiveMQConnection.DEFAULT_USER,
                ActiveMQConnection.DEFAULT_PASSWORD,
                "tcp://localhost:61616");
        try {
            // 构造从工厂得到连接对象
            connection = connectionFactory.createConnection();
            // 启动
            connection.start();
            // 获取操作连接
            session = connection.createSession(Boolean.TRUE,
                    Session.AUTO_ACKNOWLEDGE);
            // 获取session注意参数值xingbo.xu-queue是一个服务器的queue,须在在ActiveMq的console配置
            destination = session.createQueue("test-queue");
            // 得到消息生成者【发送者】
            producer = session.createProducer(destination);
            // 设置不持久化,可以更改
            producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
            // 构造消息
            sendMessage(session, producer);
            session.commit();

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (null != connection)
                    connection.close();
            } catch (Throwable ignore) {
            }
        }

    }
    public static void sendMessage(Session session, MessageProducer producer)
            throws Exception {
        for (int i = 1; i <=SEND_NUMBER; i++) {
            TextMessage message = session
                    .createTextMessage("ActiveMq 发送的消息" + i);
            // 发送消息到目的地方
            System.out.println("发送消息:" + i);
            producer.send(message);
        }
    }
}

         3:接收端,receive
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageConsumer;
import javax.jms.MessageListener;
import javax.jms.Session;
import javax.jms.TextMessage;

import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;

public class Receiver {
    public static void main(String[] args) {

        // ConnectionFactory :连接工厂,JMS 用它创建连接
        ConnectionFactory connectionFactory;
        // Connection :JMS 客户端到JMS Provider 的连接
        Connection connection = null;
        // Session: 一个发送或接收消息的线程
        Session session;
        // Destination :消息的目的地;消息发送给谁.
        Destination destination;
        // 消费者,消息接收者
        MessageConsumer consumer;

        connectionFactory = new ActiveMQConnectionFactory(
                ActiveMQConnection.DEFAULT_USER,
                ActiveMQConnection.DEFAULT_PASSWORD, "tcp://localhost:61616");
        try {
            // 构造从工厂得到连接对象
            connection = connectionFactory.createConnection();
            // 启动
            connection.start();
            // 获取操作连接
            session = connection.createSession(Boolean.FALSE,
                    Session.AUTO_ACKNOWLEDGE);
            //test-queue跟sender的保持一致,一个创建一个来接收
            destination = session.createQueue("test-queue");
            consumer = session.createConsumer(destination);
            consumer.setMessageListener(new MessageListener() {
                public void onMessage(Message arg0) {
                    System.out.println("==================");
                    try {
                        System.out.println("RECEIVE1第一个获得者:"
                                + ((TextMessage) arg0).getText());
                    } catch (JMSException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }

                }
            });

            MessageConsumer consumer1 = session.createConsumer(destination);
            consumer1.setMessageListener(new MessageListener() {
                public void onMessage(Message arg0) {
                    System.out.println("+++++++++++++++++++");
                    try {
                        System.out.println("RECEIVE1第二个获得者:"
                                + ((TextMessage) arg0).getText());
                    } catch (JMSException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }

                }
            });
        } catch (Exception e) {
            e.printStackTrace();
        }
        //在eclipse里运行的时候,这里不要关闭,这样就可以一直等待服务器发送了,不然就直接结束了。
        // } finally {
        // try {
        // if (null != connection)
        // connection.close();
        // } catch (Throwable ignore) {
        // }
        // }

    }
}

         4:发送端,sender
         上面的是用Queue的方式来创建,下面再用topic的方式实现同样的功能。

import javax.jms.Connection;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageConsumer;
import javax.jms.MessageListener;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.jms.Topic;

import org.apache.activemq.ActiveMQConnectionFactory;
import org.apache.activemq.command.ActiveMQTopic;

public class TopicTest {
    public static void main(String[] args) throws Exception {
        ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory(
                "tcp://localhost:61616");

        Connection connection = factory.createConnection();
        connection.start();

        // 创建一个Topic
        Topic topic = new ActiveMQTopic("testTopic");
        Session session = connection.createSession(false,
                Session.AUTO_ACKNOWLEDGE);

        // 注册消费者1
        MessageConsumer comsumer1 = session.createConsumer(topic);
        comsumer1.setMessageListener(new MessageListener() {
            public void onMessage(Message m) {
                try {
                    System.out.println("Consumer1 get "
                            + ((TextMessage) m).getText());
                } catch (JMSException e) {
                    e.printStackTrace();
                }
            }
        });

        // 注册消费者2
        MessageConsumer comsumer2 = session.createConsumer(topic);
        comsumer2.setMessageListener(new MessageListener() {
            public void onMessage(Message m) {
                try {
                    System.out.println("Consumer2 get "
                            + ((TextMessage) m).getText());
                } catch (JMSException e) {
                    e.printStackTrace();
                }
            }

        });

        // 创建一个生产者,然后发送多个消息。
        MessageProducer producer = session.createProducer(topic);
        for (int i = 0; i < 10; i++) {
            System.out.println("producer begin produce=======");
            producer.send(session.createTextMessage("Message:" + i));
        }
    }

}
分享到:
评论

相关推荐

    JMS 使用 ActiveMQ 传送文件

    尽管描述中并未给出具体信息,但我们可以推断这篇博文可能详细介绍了如何使用JMS与ActiveMQ结合来实现文件传输。博主可能讨论了如何配置ActiveMQ服务器,以及如何通过JMS API创建消息,将文件内容封装到消息中,然后...

    activeMq in action 使用activeMq开发JMS的简单讲述

    本篇文章将深入探讨如何使用ActiveMQ进行JMS开发,以及ActiveMQ的核心特性。 一、Java消息服务(JMS) JMS是一种为分布式环境设计的消息传递规范,它定义了生产、存储和消费消息的标准接口。通过JMS,应用程序可以...

    ActiveMQ在JMS中的运用-深入浅出JMS

    在实际应用中,开发者通常会使用ActiveMQ作为JMS的消息代理,创建消息生产者和消费者来实现消息的发送和接收。例如,生产者可以创建一个消息,设置其属性,然后通过ActiveMQ连接发送到队列或主题。消费者则监听指定...

    activemq-jms-pool-5.9.0.jar

    标签:activemq-jms-pool-5.9.0.jar,activemq,jms,pool,5.9.0,jar包下载,依赖包

    activemq-jms-pool-5.9.1.jar

    标签:activemq-jms-pool-5.9.1.jar,activemq,jms,pool,5.9.1,jar包下载,依赖包

    activemq-jms-pool-5.14.4.jar

    activemq-jms-pool-5.14.4.jar

    activemq-jms-pool-5.9.1-javadoc.jar

    标签:activemq-jms-pool-5.9.1-javadoc.jar,activemq,jms,pool,5.9.1,javadoc,jar包下载,依赖包

    activemq-jms-pool-5.10.0.jar

    标签:activemq-jms-pool-5.10.0.jar,activemq,jms,pool,5.10.0,jar包下载,依赖包

    activemq-jms-pool-5.10.0-javadoc.jar

    标签:activemq-jms-pool-5.10.0-javadoc.jar,activemq,jms,pool,5.10.0,javadoc,jar包下载,依赖包

    activeMQ-JMS实例

    在本文中,我们将深入探讨如何使用Spring MVC框架与ActiveMQ结合实现JMS(Java Message Service)实例。首先,让我们理解ActiveMQ和JMS的基本概念。 ActiveMQ是Apache软件基金会开发的一款开源消息代理,它实现了...

    JMS.rar_activemq_jms_jms activemq

    ActiveMQ是Apache软件基金会开发的一款开源消息中间件,它是Java消息服务(Java Message Service,简称JMS)的一个实现。JMS是一种为分布式应用提供异步消息传递的API,它定义了一种标准接口,使得不同的消息系统...

    使用ActiveMQ实现Jms到Jms Bridge的实现

    本篇文章将详细介绍如何使用ActiveMQ实现JMS到JMS的桥接,从而整合现有的JMS系统。 首先,我们需要理解JMS(Java Message Service)的概念。JMS是一种标准API,用于在不同应用之间发送和接收消息。它定义了生产者...

    ActiveMq-JMS简单实例

    在这个"ActiveMQ-JMS简单实例"中,我们将探讨如何在Tomcat服务器上部署并使用ActiveMQ,以及通过代码实现JMS的基本功能。 首先,让我们了解ActiveMQ的核心概念。ActiveMQ作为消息代理,它接收和转发消息,提供持久...

    Spring整合Blazeds实现ActiveMQ JMS消息服务

    标题中的“Spring整合Blazeds实现ActiveMQ JMS消息服务”指的是在Java应用程序中使用Spring框架与Blazeds(一个Flex和Java之间的消息传递中间件)集成,通过ActiveMQ(一个流行的开源JMS提供商)来实现消息队列服务...

    activeMQ-jms

    Apache ActiveMQ是业界广泛使用的一款开源消息中间件,它基于Java Message Service (JMS) 规范,提供了高效、可靠的异步通信能力。在“activeMQ-jms”这个压缩包中,我们通常会找到Apache ActiveMQ 5.13.4版本的相关...

    ActiveMQ-jms jar包

    ActiveMQ-jms jar包是Apache ActiveMQ项目的一部分,它提供了Java消息服务(JMS)的实现,使得开发者能够在Java应用程序中使用消息传递功能。ActiveMQ是业界广泛使用的开源消息代理,它支持多种协议,如AMQP、STOMP...

    apache__activemq_jms 的例子(带jar包)

    ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息...ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provider实现,尽管JMS规范出台已经是很久的事情了,但是JMS在当今的J2EE应用中间仍然扮演着特殊的地位。

    activemq +jms(原生和集成spring-jms)

    在"activemq + jms(原生和集成spring-jms)"的主题中,我们将探讨如何使用ActiveMQ原生API以及结合Spring-JMS框架来实现消息队列的创建与使用,主要涵盖以下几个核心知识点: 1. **ActiveMQ的基本概念**:包括Broker...

    Flex整合ActiveMQ(JMS)

    Flex整合ActiveMQ(JMS)是一项在Web应用开发中实现消息传递的重要技术,它结合了Flex前端的灵活性和ActiveMQ后端的高效消息队列服务。在这个过程中,Flex作为一个富互联网应用程序(RIA)平台,通过Java消息服务...

Global site tag (gtag.js) - Google Analytics