ActiveMQ基本配置与示例演示

一、下载ActiveMQ

去官方网站下载:http://activemq.apache.org/

二、运行ActiveMQ

将apache-activemq-5.11.1-bin.zip解压,由于本系统是32位,所以进入apache-activemq-5.11.1\bin\win32目录。

1、安装InstallService.bat,如果出现下图,也许是你电脑已经安装过该服务。

2、点击wrapper.exe,运行,如果出现下图所示,表示已经简单配置好了。

不过期间,如果你没有设置JAVA_HOME环境变量,会出错,所以,最好是建立一个JAVA_HOME环境变量,其值设置为C:\Program Files\Java\jdk1.8.0(该路径为jdk的安装路径)。

3、要想运行activemq,必须开启activemq.bat服务,点击它,让其运行。

三、使用NetBeans创建项目运行

1、JMS基本概念

JMS(Java Message Service) 即Java消息服务。它提供标准的产生、发送、接收消息的接口简化企业应用的开发。它支持两种消息通信模型:点到点(point-to-point)(P2P)模型和发布/订阅(Pub/Sub)模型。P2P模型规定了一个消息只能有一个接收者;Pub/Sub 模型允许一个消息可以有多个接收者。
    对于点到点模型,消息生产者产生一个消息后,把这个消息发送到一个Queue(队列)中,然后消息接收者再从这个Queue中读取,一旦这个消息被一个接收者读取之后,它就在这个Queue中消失了,所以一个消息只能被一个接收者消费。

  与点到点模型不同,发布/订阅模型中,消息生产者产生一个消息后,把这个消息发送到一个Topic中,这个Topic可以同时有多个接收者在监听,当一个消息到达这个Topic之后,所有消息接收者都会收到这个消息。

2、编程的结构

2.1消息产生者向JMS发送消息的步骤 

(1)创建连接使用的工厂类JMS ConnectionFactory 
(2)使用管理对象JMS ConnectionFactory建立连接Connection 
(3)使用连接Connection 建立会话Session 
(4)使用会话Session和管理对象Destination创建消息生产者MessageSender 
(5)使用消息生产者MessageProducer发送消息

2.2消息消费者从JMS接受消息的步骤 

(1)创建连接使用的工厂类JMS ConnectionFactory 
(2)使用管理对象JMS ConnectionFactory建立连接Connection 
(3)使用连接Connection 建立会话Session 
(4)使用会话Session和管理对象Destination创建消息消费者MessageReceiver 
(5)使用消息消费者MessageConsumer接受消息

3、代码

整个工程需引入activemq-all-5.11.1.jar作为类库文件。其次建立JmsSender.java与JmsReceiver.java两个文件模拟消息产生者向JMS发送消息和消息消费者从JMS接受消息。

JmsSender.java文件

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package testactivemq;

import javax.jms.*;
import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;

/**
 *
 * @author LIN NP
 */
public class JmsSender
{
    private ConnectionFactory connectionFactory = null;
    private Connection connection = null;
    private Session session = null;
    private Destination destination = null;
    private MessageProducer producer = null;
    private static final int SEND_NUMBER = 5;

    /**
     *
     */
    public void init()
    {
        // 构造ConnectionFactory实例对象,此处采用ActiveMq的实现jar
        connectionFactory = new ActiveMQConnectionFactory(
                ActiveMQConnection.DEFAULT_USER,
                ActiveMQConnection.DEFAULT_PASSWORD,"tcp://localhost:61616");    // ActiveMQ默认使用的TCP连接端口是61616

        try{
            // 构造从工厂得到连接对象
            connection = connectionFactory.createConnection();
            connection.start();

            // 获取操作连接
            session = connection.createSession(Boolean.TRUE,  Session.AUTO_ACKNOWLEDGE);

            /**
            * 第一种方式:Queue
            */
//            destination = session.createQueue("xkey");        // "xkey"可以取其他的。
//            producer = session.createProducer(destination); // 得到消息生成者【发送者】

            /**
             * 第二种方式:Topic
             */
             Topic topic = session.createTopic("xkey.Topic");
             producer = session.createProducer(topic);

             /**
              *
              */
            // 设置不持久化,此处学习,实际根据项目决定
            producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);

            // 构造消息,此处写死,项目就是参数,或者方法获取
            sendMessage(session,producer);
            session.commit();

        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
        finally
        {
            try
            {
                connection.close();
            }
            catch (JMSException e)
            {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }

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

    /**
     * @param args
     */
    public static void main(String[] args)
    {
        // TODO Auto-generated method stub
        JmsSender jms = new JmsSender();
        jms.init();
    }
}

JmsReceiver.java文件

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package testactivemq;

import javax.jms.*;
import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;

/**
 *
 * @author LIN NP
 */
public class JmsReceiver
{
    private ConnectionFactory connectionFactory = null;
    private Connection connection = null;
    private Session session = null;
    private MessageConsumer consumer = null;
    private Destination destination = null;

    public void init()
    {

        connectionFactory = new ActiveMQConnectionFactory(
                ActiveMQConnection.DEFAULT_USER,
                ActiveMQConnection.DEFAULT_PASSWORD,"tcp://localhost:61616"); // ActiveMQ默认使用的TCP连接端口是61616
        try
        {
            // 构造从工厂得到连接对象
            connection = connectionFactory.createConnection();
            connection.start();
            // 获取操作连接
            session = connection.createSession(Boolean.TRUE,  Session.AUTO_ACKNOWLEDGE);
            /**
            * 第一种方式:Queue
            */
//            destination = session.createQueue("xkey");
//            consumer = session.createConsumer(destination);

            /**
             * 第二种方式:Topic
             */
            Topic topic = session.createTopic("xkey.Topic");
            consumer = session.createConsumer(topic);

            /**
              *
              */
            while (true)
            {
                //设置接收者接收消息的时间,为了便于测试,这里谁定为500s
                TextMessage message = (TextMessage) consumer.receive(500000);
                if (null != message)
                {
                    System.out.println("Receiver " + message.getText());
                }
                else
                {
                    break;
                }
            }
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
        finally
        {
            try
            {
                connection.close();
            }
            catch (JMSException e)
            {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
    /**
     * @param args
     */
    public static void main(String[] args)
    {
        // TODO Auto-generated method stub
        JmsReceiver jms = new JmsReceiver();
        jms.init();
    }
}

4、测试过程

在整个过程中,要保证activemq.bat服务是运行的。

4.1 运行JmsReceiver.java文件,testActiveMQ (run)控制台会出现

log4j:WARN No appenders could be found for logger (org.apache.activemq.transport.WireFormatNegotiator).

log4j:WARN Please initialize the log4j system properly.

log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.

4.2 运行JmsSender.java文件,testActiveMQ (run) #2控制台会出现

log4j:WARN No appenders could be found for logger (org.apache.activemq.transport.WireFormatNegotiator).

log4j:WARN Please initialize the log4j system properly.

log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.

发送消息:ActiveMq 发送的消息: 1

发送消息:ActiveMq 发送的消息: 2

发送消息:ActiveMq 发送的消息: 3

发送消息:ActiveMq 发送的消息: 4

发送消息:ActiveMq 发送的消息: 5

其中警告信息可以忽略,暂时也没去找警告来自哪里。

4.3 返回到testActiveMQ (run)控制台会出现

run:

log4j:WARN No appenders could be found for logger (org.apache.activemq.transport.WireFormatNegotiator).

log4j:WARN Please initialize the log4j system properly.

log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.

Receiver ActiveMq 发送的消息: 1

Receiver ActiveMq 发送的消息: 2

Receiver ActiveMq 发送的消息: 3

Receiver ActiveMq 发送的消息: 4

Receiver ActiveMq 发送的消息: 5

 

主要参考:

http://www.cnblogs.com/xwdreamer/archive/2012/02/21/2360818.html

http://www.open-open.com/lib/view/open1388994166156.html

时间: 2024-10-11 17:25:30

ActiveMQ基本配置与示例演示的相关文章

概览 Windows Communication Foundation (WCF) 体系结构及其主要概念。代码示例演示 WCF 约定、终结点和行为

摘要:概览 Windows Communication Foundation (WCF) 体系结构及其主要概念.代码示例演示 WCF 约定.终结点和行为. 本页内容 简介 WCF 基础 代码示例 小结 简介 本文档提供 Windows Communication Foundation (WCF) 体系结构的概览.本文旨在阐释 WCF 中的主要概念以及它们如何协调工作.还有几个代码示例对这些概念进行深入阐释,但代码不是本文档的重点. 本文档下面的部分分为以下两个主要内容: WCF 基础:涵盖 WC

Django示例演示

引用自:https://blog.csdn.net/weixin_42950386/article/details/83143293 定义模型类 模型类被定义在"应用/models.py"文件中,此例中为"booktest/models.py"文件.模型类必须继承自Model类,位于包django.db.models中.提示:对于重要数据使用逻辑删除. 示例演示 接下来首先以"图书-英雄"管理为例进行演示.注意:这里我们用的版本是django==

数据库分库分表(sharding)系列(一) 拆分实施策略和示例演示

本文原文连接: http://blog.csdn.net/bluishglc/article/details/7696085 ,转载请注明出处!本文着重介绍sharding切分策略,如果你对数据库sharding缺少基本的了解,请参考我另一篇从基础理论全面介绍sharding的文章:数据库Sharding的基本思想和切分策略 第一部分:实施策略 图1.数据库分库分表(sharding)实施策略图解(点击查看大图) 1.准备阶段 对数据库进行分库分表(Sharding化)前,需要开发人员充分了解系

Struts 2相关配置与基本操作演示(案例Demo)

基本介绍 Struts 2 Struts 2是Struts的下一代产品,是在 struts 1和WebWork的技术基础上进行了合并的全新的Struts 2框架.其全新的Struts 2的体系结构与Struts 1的体系结构差别巨大.Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与ServletAPI完全脱离开,所以Struts 2可以理解为WebWork的更新产品.虽然从Struts 1到Struts 2有着太大的变化,但是相对于W

tomcat监听activemq jms配置

当从webservice接收到信息的时候,消息生产者producer立刻把收到的消息放入到jms里面,消费者cusomer这时要设置一个监听,当生产者发送消息时,只要消息被发出来,消费者就会接收到消息,然后进行相应的操作. 在tomcat里面,要进行配置. 首先在tomcat安装目录里面,对conf/context.xml进行配置,加入以下代码: <Resource name="jms/FailoverConnectionFactory" auth="Container

java 队列、优先级队列、双向队列示例演示代码

package org.rui.collection2.queues; import java.util.LinkedList; import java.util.PriorityQueue; import java.util.Queue; import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.ConcurrentLinkedQueue; import java.util.concurrent.Li

(转)关于ActiveMQ的配置

目前常用的消息队列组建无非就是MSMQ和ActiveMQ,至于他们的异同,这里不想做过多的比较.简单来说,MSMQ内置于微软操作系统之中,在部署上包含一个隐性条件:Server需要是微软操作系统.(对于这点我并去调研过MSMQ是否可以部署在非微软系统,比如:Linux,只是拍脑袋想了想,感觉上是不可以).对于ActiveMQ,微软系统和Linux都是可以部署的.从功能方面来说,一般最常用的就是:消息的收/发,感觉差异不大.从性能上来说,一般的说法是ActiveMQ略高.在稳定性上,个人感觉MSM

HTML5菜鸟入门指导:简介、平台搭建、示例演示

HTML5菜鸟入门指导:简介.平台搭建.示例演示 一.HTML5简介 1.  了解HTML (1).什么是HTML? HTML是用来描述网页的一种语言: HTML指超文本标记语言(Hyper Text Markup Language) HTML不是变成语言,是一种标记语言 (2).版本 HTML出现于1991年 HTML+出现于1993年 HTML2.0出现于1995年 HTML3.2出现于1997年 HTML4.01出现于1999年 XHTML1.0出现于2000年 HTML5出现于2012年

C连接MySQL数据库开发之Linux环境完整示例演示(增、删、改、查)

一.开发环境 ReadHat6.3 32位.mysql5.6.15.gcc4.4.6 二.编译 gcc -I/usr/include/mysql -L/usr/lib -lmysqlclient main.c -o main.out -I:指定mysql头文件所在目录(默认去/usr/include目录下寻找所用到的头文件) -L:指定mysql动态库文件所在目录(默认从/usr/lib目录查找) -l:链接libmysqlclient.so动态库 -o:生成的可执行文件名 三.完整示例 //