[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]
3、消息生成类
4、发送消息类
5、接收消息类
[size=small] 该例子是需要将系统生成的大量log信息存储到数据库中(代码中DB部分已被忽略掉),如果实时进行存储的话,会严重影响当前系统性能,所以就考虑到将log信息通过MQ进行信息推送,在另外单独的系统中进行处理。这样就不会影响到当前该系统的性能。[/size]
背景:多个功能模块或者系统间需要进行消息传递时,短时间内推送的信息较多,且对目标模块或者系统处理消息时间要求不是很高的时候,可以考虑采用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]