activeMQ

ActiveMQ——介绍、入门级demo

2015-09-17  本文已影响2258人  会点代码的大叔

想要了解ActiveMQ是啥,首先得知道JMS,所以先对MOM和JMS做一个介绍:

MOM:企业消息系统,即面向消息的中间件,提供了以松散耦合的灵活方式集成应用程序的一种机制。它们提供了基于存储和转发的应用程序之间的异步数据发送,即应用程序彼此不直接通信,而是与作为中介的MOM通信。

Java Message Service:是Java平台上有关面向消息中间件的技术规范。

有一个比较通俗的解释,JMS类似于JDBC,JDBC是可以用来访问许多不同关系数据库的API,而JMS则提供同样与厂商无关的访问的API,以访问消息收发服务。比如IBM 的MQSeries、BEA的Weblogic JMS service;而ActiveMQ也是其中的一种,所以:activeMQ就是支持jms规范的一个server;它对于JDBC和数据库的关系来说,它就是个mysql(MQSeries就是DB2,Weblogic JMS service就是Oracle)。

在没有JDBC之前,程序员需要访问数据库的时候,需要根据不同的数据库进行不同的编码;在有了JDBC之后,开发过程中,对于不同数据库的访问方法被规范化,只需要根据不同的数据库使用不同的数据库驱动,就可以用通用的方法访问数据库。

在没有JMS之前,程序员开发过程中,如果需要和MOM进行消息发送或接受的时候,需要根据不同的MOM进行不同的编码;相同的,有了JMS之后,代码被规范。

这个相当于JMS通讯简单的示意图,应用程序A将Message发送到服务器上,然后应用程序B从服务器中接收A发来的消息。

当应用程序A发送其消息时,应用程序B甚至可以不处于执行状态。MOM将保留这个消息,直到应用程序B开始执行并试着检索消息为止。这还防止了应用程序A因为等待应用程序B检索消息而出现阻塞。

另外一个方面,A和B互相不认识,以后A被换成了C,换成了D,数据的来源变了,对B是没有影响的,并且B是不需要做任何改动的。

当然这只是最基本的一些优点,更多的优点还需要深入的学习。

知道了JMS和ActiveMQ的概念了,下面对ActiveMQ做一个入门级的demo:

1.下载ActiveMQ:http://activemq.apache.org/activemq-551-release.html我找的网上的例子做的参考,为了省事儿,我用了和资料里面一样的ActiveMQ版本。

2.运行ActiveMQ:

解压缩apache-activemq-5.5.1-bin.zip,然后双击apache-activemq-5.5.1\bin\activemq.bat运行ActiveMQ程序。

运行起来后,可以用IE访问:http://localhost:8161/admin/index.jsp

然后创建一个Queue,命名为FirstQueue:

3.创建Eclipse项目并运行

因为在这里需要有一个消息接收端,一个消息发送端,两个程序都需要运行,我就省事儿开了两个eclipse,不同的workspace。

创建project:ActiveMQ-5.5,并导入apache-activemq-5.5.1\lib目录下需要用到的jar文件,项目结构如下图所示:

两个工程都类似。

4.然后编写代码,一个发送,一个接受:

Receiver.java

package com.cn.lw.activemq;

import javax.jms.Connection;

import javax.jms.ConnectionFactory;

import javax.jms.Destination;

import javax.jms.MessageConsumer;

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);

// 获取session注意参数值xingbo.xu-queue是一个服务器的queue,须在在ActiveMq的console配置

destination = session.createQueue("FirstQueue");

consumer = session.createConsumer(destination);

while (true) {

//设置接收者接收消息的时间,为了便于测试,这里谁定为100s

TextMessage message = (TextMessage) consumer.receive(100000);

if (null != message) {

System.out.println("收到消息" + message.getText());

} else {

break;

}

}

} catch (Exception e) {

e.printStackTrace();

} finally {

try {

if (null != connection)

connection.close();

} catch (Throwable ignore) {

}

}

}

}

Sender.java

5.先运行,Receiver,java,一运行报错  - -||

谷歌用不了,勉强用一下百度,查到的结果是少一个jar,果断现在并引入到工程。

slf4j-nop-1.5.5.jar

6.再次运行,先接受端,再发送端,成功:

这些基本都是对网上一些资料的学习和参考,demo比较简单,ActiveMQ更多的功能,还需要深入的学习。

上一篇下一篇

猜你喜欢

热点阅读