上篇说了KAFKA应用实例,本篇承接上篇,着重描述activeMQ消息机制的应用。
KAFKA和MQ同为数据异步处理中间件,本质都是对消息的异步处理,异步通信、削谷填峰,高并发情况下的数据处理机制。他们的不同之处在于处理数据量的大小。
MQ和KAFKA相比较,KAFKA处理的数据量更大.
下图为activeMQ应用目录:
ActiveMQ客户端,对连接和会话的管理/**
*
*/
package com.ustcinfo.kanms.alarmcollector.activemq;
import javax.jms.Connection;
import javax.jms.ExceptionListener;
import javax.jms.JMSException;
import javax.jms.Session;
import org.apache.activemq.ActiveMQConnectionFactory;
import org.apache.log4j.Logger;
import com.ustcinfo.kanms.alarmcollector.main.GlobleConfiguration;
/**
* =================================================
* 工程:GessAlarmCollector
* 类名:ActiveMQClient
* 作者:dlzhang
* 时间:2014-8-28下午05:37:21
* 版本:Version 1.0
* 描述:ActiveMQ客户端,对连接和会话的管理,保证全局只有一个会话被创建,减少服务端压力、节省资源
* =================================================
*/
public class ActiveMQClient{
private static final Logger logger = Logger.getLogger(ActiveMQClient.class);
private String url;
private String user;
private String passwd;
private ActiveMQConnectionFactory connFactory;
private Connection conn;
private Session session;
private boolean isConn;
public ActiveMQClient(){
// 初始化参数
this.url = GlobleConfiguration.getInstance().getActiveMqUrl();
this.user = GlobleConfiguration.getInstance().getActiveMqUser();
this.passwd = GlobleConfiguration.getInstance().getActiveMqPasswd();
}
/**
* 建立连接
*/
protected synchronized void buildConnect() {
if(isConn)
return;
try {
logger.debug("建立连接,user=" + user + ", passwd=" + passwd + ", url=" + url);
connFactory = new ActiveMQConnectionFactory(user, passwd, url);
conn = connFactory.createConnection();
conn.start();
session = conn.createSession(Boolean.FALSE, Session.AUTO_ACKNOWLEDGE);
isConn = true;
logger.info("建立连接成功");
} catch (JMSException e) {
logger.error("建立连接失败:" + e.getMessage(), e);
isConn = false;
}
}
/**
* 关闭连接
*/
public synchronized void close() {
try {
if(null != session)
session.close();
if(null != conn)
conn.close();
} catch (JMSException e) {
logger.error("关闭连接失败:" + e.getMessage(), e);
} finally {
session = null;
conn = null;
connFactory = null;
isConn = false;
}
}
/**
* @return the url
*/
public String getUrl() {
return url;
}
/**
* @param url the url to set
*/
public void setUrl(String url) {
this.url = url;
}
/**
* @return the user
*/
public String getUser() {
return user;
}
/**
* @param user the user to set
*/
public void setUser(String user) {
this.user = user;
}
/**
* @return the passwd
*/
public String getPasswd() {
return passwd;
}
/**
* @param passwd the passwd to set
*/
public void setPasswd(String passwd) {
this.passwd = p