想要了解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.然后编写代码,一个发送,一个接受:
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) {
}
}
}
}
5.先运行,Receiver,java,一运行报错 - -||
谷歌用不了,勉强用一下百度,查到的结果是少一个jar,果断现在并引入到工程。
6.再次运行,先接受端,再发送端,成功:
这些基本都是对网上一些资料的学习和参考,demo比较简单,ActiveMQ更多的功能,还需要深入的学习。
网友评论