`

AvtiveMQ Demo(简单demo,介绍详细适合初学者)

阅读更多
一、安装启动参考:
http://blog.sina.com.cn/s/blog_a459dcf501017oml.html

二、注意事项
   1.关于API方法中参数的具体含义可参考java EE 6 API文档

   2.JMS1.0.2 规范中定义了两种消息传递域:点对点(PTP)消息传递域和发布/订阅消息传递域。

     点对点消息传递域的特点如下:
       • 每个消息只能有一个消费者。
       • 消息的生产者和消费者之间没有时间上的相关性。无论消费者在生产者发送消息的时候是否处于运行状态,它都可以提取消息。

     发布/订阅消息传递域的特点如下:
       • 每个消息可以有多个消费者。
       • 生产者和消费者之间有时间上的相关性。订阅一个主题的消费者只能消费自它订阅之后发布的消息。JMS 规范允许客户创建持久订阅,这在一定程度上放松了时间上的相关性要求。持久订阅允许消费者消费它在未处于激活状态时发送的消息。

     在点对点消息传递域中,目的地被成为队列(queue);在发布/订阅消息传递
域中,目的地被成为主题(topic)。

   3.topic时先调用FirstReceiver类再调用FirstSender类,queue时无先后顺序(看懂了注意事项第二条这条可滤去)。

三、java代码

1.FirstReceiver类
package com.maxLv.activemq;

import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.MessageConsumer;
import javax.jms.Session;
import javax.jms.TextMessage;

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

public class FirstReceiver {
    public static void main(String[] args){        
        // 连接工厂,JMS 用它创建连接
        ConnectionFactory connectionFactory;       
        // JMS 客户端到 JMS Provider 的连接
        Connection connection = null;      
        // 一个发送消息的线程
        Session session;      
        // 消息的目的地
        Destination destination;
        // 消息接受者
        MessageConsumer messageConsumer;
        // 构造函数传入用户名、密码、brokerURL进行初始化连接
        connectionFactory = new ActiveMQConnectionFactory(
                ActiveMQConnection.DEFAULT_USER,
                ActiveMQConnection.DEFAULT_PASSWORD,
                "tcp://localhost:61616");
        
        try {
            // 构造从工厂得到连接对象
            connection = connectionFactory.createConnection();
            // 启动
            connection.start();
            // 获取连接操作{非事务性会话时(Boolean.FALSE)消息何时被确认由AUTO_ACKNOWLEDGE、CLIENT_ACKNOWLEDGE、DUPS_ACKNOWLEDGE三种应答模式决定}
            session = connection.createSession(Boolean.FALSE, Session.AUTO_ACKNOWLEDGE);
            // 获取session注意参数值First-Queue(First-Topic)是一个服务器的queue(topic),须在ActiveMQ的console配置
            destination = session.createQueue("First-Queue");
            // destination = session.createTopic("First-Topic");
            messageConsumer = session.createConsumer(destination);
            while (true) {
                // 设置接受者接受消息的时间(500s)
                TextMessage textMessage = (TextMessage) messageConsumer.receive(500000);
                if (null != textMessage) {
                    System.out.println("Message received:" + textMessage.getText());
                }else {
                    break;
                }
            }
        } catch (JMSException e) {
            e.printStackTrace();
        } finally {
            if (null != connection) {
                try {
                    connection.close();
                } catch (JMSException e) {
                    e.printStackTrace();
                }
            }
        }
    } 
}

2.FirstSender类
package com.maxLv.activemq;

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

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

public class FirstSender {
    private static final int SEND_NUMBER = 20;
    
    //发送消息
    private static void sendMessage(Session session,MessageProducer messageProducer) 
            throws JMSException{
        int times = 1;
        while (times <= SEND_NUMBER) { 
            TextMessage textMessage = session.createTextMessage("The Message Of" +" "+ times);           
            System.out.println("Message Send:The ActiveMQ Message Of" +" "+ times);
            messageProducer.send(textMessage);
            times ++;
        }
    }
    
    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;
        // 构造函数传入用户名、密码、brokerURL进行初始化连接
        connectionFactory = new ActiveMQConnectionFactory(
                ActiveMQConnection.DEFAULT_USER,
                ActiveMQConnection.DEFAULT_PASSWORD,
                "tcp://localhost:61616");
        try {
            // 构造从工厂得到连接
            connection = connectionFactory.createConnection();
            // 启动
            connection.start();
            // 获取连接操作{事务性会话时(Boolean.TRUE)消息自动确认}
            session = connection.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE);
            // 获取session注意参数值First-Queue(First-Topic)是一个服务器的queue(topic),须在ActiveMQ的console配置
            destination = session.createQueue("First-Queue");
            // destination = session.createTopic("First-Topic");
            messageProducer = session.createProducer(destination);
            // 发送消息
            sendMessage(session, messageProducer);
            session.commit();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (null != connection) {
                try {
                    connection.close();
                } catch (JMSException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}


0
0
分享到:
评论
1 楼 sgq0085 2015-02-17  
AvtiveMQ ActiveMQ傻傻分不清楚

相关推荐

    AjaxPro 简单Demo适合初学者

    这个"AjaxPro简单Demo适合初学者"是一个很好的起点,帮助新手理解如何在实际项目中运用AjaxPro技术来提升Web应用的用户体验。 首先,AjaxPro的核心特性是它可以将服务器端的.NET方法封装为Ajax调用,使得前端...

    Demo.zip_DEMO_DSP 初学_demo DSP初学_demo DTFT

    "demo dsp_初学"和"demo_dsp初学"进一步强调了这是一份面向初学者的DSP教学资源,"demo"在这里指演示或示例,暗示了资源中可能包含可运行的代码示例。"demo_dtft"则直接点明了离散时间傅里叶变换这一核心知识点会被...

    b站登录demo_B站_DEMO_适合初学者_简单的b站登录注册demo_源码

    这个"B站登录demo"是一个专为初学者设计的项目,旨在帮助他们理解...通过这个"B站登录demo"项目,初学者不仅可以学习到网页开发的基础知识,还能实际动手操作,提升问题解决能力,为后续深入学习Web开发打下坚实基础。

    ssm初学者demo

    这个"ssm初学者demo"项目是一个适合初学者学习SSM架构的基础示例,它可以帮助新手快速理解和掌握这三大框架的基本用法。 1. **Spring框架**:Spring是Java企业级应用的核心框架,提供了IOC(Inversion of Control,...

    适合初学websocket者的websocketDemo

    标题“适合初学websocket者的websocketDemo”暗示了这个项目是一个用于教授WebSocket基础的实例,特别适合对网络编程感兴趣的初学者。通过这个Demo,你可以了解到WebSocket协议的基本概念,以及如何在Java应用中集成...

    ajaxDEMO 适合ajax初学者

    本AjaxDEMO适合初学者学习,旨在提供一个基础的实践平台,帮助理解Ajax的工作原理及其在实际开发中的应用。** ### 1. Ajax基础知识 Ajax的核心是JavaScript对象XMLHttpRequest,它允许在后台与服务器端通信。当...

    java SE最经典的桌面小程序(N多demo)适合初学者

    初学者可以通过DEMO学习如何创建和使用类,理解类与对象的关系,以及如何通过继承和多态实现代码复用和扩展。 3. **图形用户界面(GUI)**:Java SE提供了丰富的GUI库,如Swing和JavaFX,用于创建桌面应用的交互...

    demo项目java初学者可以看看

    【标题】"demo项目java初学者可以看看"指的是一个适合Java初学者的示例项目,旨在帮助新手了解和学习Java编程。这样的项目通常包含了各种基础和进阶的编程概念,以便学习者通过实际操作来加深理解。 【描述】"java ...

    springcloud的简单demo,适合初学,简单易懂

    在这个“springcloud的简单demo”中,我们将重点关注Eureka服务发现组件的集成,这是一个非常适合初学者上手的实例。 1. **Eureka**:Eureka是Netflix开发的服务注册与发现组件,它是SpringCloud生态中的关键部分。...

    初学者 Json Demo 实例

    总结来说,这个"初学者 Json Demo 实例"是一个适合初学者的教程,旨在通过实际操作帮助学习者掌握JSON的基本使用,包括JSON的结构、解析与生成,以及如何将JSON数据与GridView控件结合。通过研究提供的"SolutionDemo...

    Axure Demo(适用于初学者可以看看怎么使用里面的元件)

    通过Demo,初学者可以学习如何构建简单的交互流程,理解条件逻辑和变量的运用。 此外,Axure支持自定义函数和脚本,这使得原型能够实现更高级的逻辑。初学者可以在Demo中探索如何使用这些高级功能,以提高原型的...

    Demo模式,适合初学者!

    Dome模式的详细代码!很适合刚刚开始接触java的学者.....

    drools初学者的demo

    这个"drools初学者的demo"是一个非常适合入门的学习资源,旨在帮助新手快速理解drools的工作原理和使用方法。 Drools的核心概念包括规则(Rule)、事实(Fact)、工作内存(Working Memory)和规则引擎(Rule ...

    android 串口测试demo 代码简单 无bug 完美运行

    android 串口测试demo 代码简单 无bug 完美运行 android 串口测试demo 代码简单 无bug 完美运行 android 串口测试demo 代码简单 无bug 完美运行 android 串口测试demo 代码简单 无bug 完美运行 android 串口测试demo...

    微信小程序demo:简易抽奖(源代码+截图)

    微信小程序demo:简易抽奖(源代码+截图)微信小程序demo:简易抽奖(源代码+截图)微信小程序demo:简易抽奖(源代码+截图)微信小程序demo:简易抽奖(源代码+截图)微信小程序demo:简易抽奖(源代码+截图)微信小程序demo...

    50-projects-main.rar javascript的demo例样,适合初学者使用

    50-projects-main.rar javascript的demo例样,适合初学者使用

    JSF1.2写的简单DEMO 对初学者有帮助

    这个DEMO是为了帮助初学者理解和入门JSF 1.2而设计的。 **JSF 1.2 的核心概念** 1. **组件(Components)**:JSF中的组件是UI的基本构建块,它们可以是简单的HTML元素,如按钮和输入框,也可以是复杂的自定义组件...

    quartz框架demo,适用于初学者

    这个"quartz框架demo"是专为初学者设计的,旨在帮助他们快速理解和上手Quartz的使用。 首先,我们要了解Quartz的核心概念: 1. **Job**:在Quartz中,Job代表一个具体的任务,你需要实现`org.quartz.Job`接口,并...

    Python初学者-适合新手小白学习python练手的demo源码

    这个"Python初学者-适合新手小白学习python练手的demo源码"集合提供了31个示例程序,旨在帮助初学者逐步理解和掌握Python编程基础。 首先,Python的基础知识包括变量、数据类型、运算符和控制结构。变量是存储信息...

    C++入门Demo(相对简单)

    总之,这个"C++入门Demo"是一个很好的起点,适合希望在Android平台上使用C++的初学者。通过逐步学习和实践,你将能够掌握C++的基础知识,并逐步提升到更高级的主题,如STL(标准模板库)、多线程编程和C++11及更高...

Global site tag (gtag.js) - Google Analytics