Active MQ实战-与Spring集成使用

[size=small]最近在项目中应用了ActiveMQ消息中间件,这里简单说一下应用背景和与Spring的集成。
背景:多个功能模块或者系统间需要进行消息传递时,短时间内推送的信息较多,且对目标模块或者系统处理消息时间要求不是很高的时候,可以考虑采用MQ消息中间件进行处理。而开源的ActiveMQ相比于IBM WebSphere MQ是足以胜任中小系统的解决方案。
下面介绍一下ActiveMQ 5.6.0版本在Windows下的安装及如何与Spring集成使用。
[b]Windows下的安装[/b]:
1、下载地址:[url]http://archive.apache.org/dist/activemq/apache-activemq/5.6.0/apache-activemq-5.6.0-bin.zip[/url]
2、解压文件后运行:
E:\apache-activemq-5.6.0\bin\activemq.bat
注意需要设置java环境变量。
3、启动后打开:
http://localhost:8161/admin/
即可看到activemq管的理页面。
[b]与Spring集成使用[/b]:
1、在apache-activemq-5.6.0文件夹中找到activemq-all-5.6.0.jar,然后导入到项目工程中。
2、添加activemq的配置文件messageQueue.xml[/size]

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="connectionFactory" class="org.apache.activemq.pool.PooledConnectionFactory">
<property name="connectionFactory">
<bean class="org.apache.activemq.ActiveMQConnectionFactory">
<!-- 测试 -->
<property name="brokerURL" value="tcp://127.0.0.1:61616?wireFormat.maxInactivityDuration=0" />
</bean>
</property>
</bean>
<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
<property name="connectionFactory">
<ref bean="connectionFactory"/>
</property>
</bean>
<bean id="logQueue" class="org.apache.activemq.command.ActiveMQQueue">
<constructor-arg index="0">
<value>LogQueue</value>
</constructor-arg>
</bean>
</beans>

3、消息生成类

import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.Session;
import org.springframework.jms.core.MessageCreator;

/**
* 创建消息
*/
public class LogMessageCreator implements MessageCreator {
private String message;

public String getMessage() {
return message;
}

public void setMessage(String message) {
this.message = message;
}

public Message createMessage(Session paramSession) throws JMSException {
return paramSession.createTextMessage(message);
}
}

4、发送消息类

import javax.jms.Destination;
import org.springframework.jms.core.JmsTemplate;
import com.necares.eterm.util.CommonMethod;

public class MessageSender {
private JmsTemplate jmsTemplate;
private Destination logQueue;

public void sendLog(String logMsg) {
LogMessageCreator myMessageCreator = new LogMessageCreator();
myMessageCreator.setMessage(logMsg);
jmsTemplate.send(logQueue, myMessageCreator);
}

public JmsTemplate getJmsTemplate() {
return jmsTemplate;
}

public Destination getLogQueue() {
return logQueue;
}

public void setJmsTemplate(JmsTemplate jmsTemplate) {
this.jmsTemplate = jmsTemplate;
}

public void setLogQueue(Destination logQueue) {
this.logQueue = logQueue;
}

}


5、接收消息类

import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.TextMessage;
import org.springframework.jms.core.JmsTemplate;

public class MessageLogReceiver implements Runnable{
private JmsTemplate jmsTemplate;
private Destination logQueue;

public void run() {
try {
receiveLogMessage();
} catch (Exception e) {
e.printStackTrace();
System.out.println("IbeLog Start Fail");
}
}

public void receiveLogMessage() throws JMSException {
TextMessage msg = null;
boolean isContinue = true;
while (isContinue) {
try {
msg = (TextMessage) jmsTemplate.receive(logQueue);
System.out.println("Received Message:" + msg.getText());
//持久化到DB
} catch (Exception e) {
e.printStackTrace();
}
}
}


public JmsTemplate getJmsTemplate() {
return jmsTemplate;
}

public Destination getLogQueue() {
return logQueue;
}


public void setJmsTemplate(JmsTemplate jmsTemplate) {
this.jmsTemplate = jmsTemplate;
}

public void setLogQueue(Destination logQueue) {
this.logQueue = logQueue;
}

}

[size=small] 该例子是需要将系统生成的大量log信息存储到数据库中(代码中DB部分已被忽略掉),如果实时进行存储的话,会严重影响当前系统性能,所以就考虑到将log信息通过MQ进行信息推送,在另外单独的系统中进行处理。这样就不会影响到当前该系统的性能。[/size]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值