最近在项目中应用了ActiveMQ消息中间件,这里简单说一下应用背景和与Spring的集成。
背景:多个功能模块或者系统间需要进行消息传递时,短时间内推送的信息较多,且对目标模块或者系统处理消息时间要求不是很高的时候,可以考虑采用MQ消息中间件进行处理。而开源的ActiveMQ相比于IBM WebSphere MQ是足以胜任中小系统的解决方案。
下面介绍一下ActiveMQ 5.6.0版本在Windows下的安装及如何与Spring集成使用。
Windows下的安装:
1、下载地址:http://archive.apache.org/dist/activemq/apache-activemq/5.6.0/apache-activemq-5.6.0-bin.zip
2、解压文件后运行:
E:\apache-activemq-5.6.0\bin\activemq.bat
注意需要设置java环境变量。
3、启动后打开:
http://localhost:8161/admin/
即可看到activemq管的理页面。
与Spring集成使用:
1、在apache-activemq-5.6.0文件夹中找到activemq-all-5.6.0.jar,然后导入到项目工程中。
2、添加activemq的配置文件messageQueue.xml
<?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;
}
}
该例子是需要将系统生成的大量log信息存储到数据库中(代码中DB部分已被忽略掉),如果实时进行存储的话,会严重影响当前系统性能,所以就考虑到将log信息通过MQ进行信息推送,在另外单独的系统中进行处理。这样就不会影响到当前该系统的性能。
分享到:
相关推荐
Active4j-flow是基于SpingBoot2.0与activiti7.x开发的一套工作流程管理系统。是以active4j-jsp为项目基础架构构建而成。以Spring Framework为核心容器,Spring MVC为模型视图控制器,Mybatis Plus为数据访问层, ...
标题"active-mq-5.11.1"指的是该版本的ActiveMQ,这是一个稳定且广泛使用的版本。 ActiveMQ作为中间件,其主要功能是提供消息传递服务,它允许应用程序之间通过发送和接收消息进行通信,而不是直接调用彼此。这种...
作为Apache软件基金会的一部分,Active MQ 支持多种协议,如OpenWire、AMQP、STOMP、MQTT等,这使得它能与各种编程语言和应用环境无缝集成。它不仅支持点对点和发布/订阅两种消息模型,还具备了高可用性、可扩展性和...
Active4j-boot是基于Spring Boot框架进行扩展和优化的,它集成了许多常用的功能模块,如权限管理、数据验证、日志记录等,使得开发者可以更快速地搭建和部署企业级应用。 Active4j-boot的核心特性包括: 1. **模块...
apache-activemq-5.6.0 绿色版,解压即可启动
使用Spring配置文件启动spring-web-active应用程序: cd spring-web-flux/ gradle build -x test java -jar -Dspring.profiles.active=dev build/libs/spring-web-react-0.0.1.jar 启动Zookeeper: ./bin/
plasma-applet-active-window-control, 用于控制当前活动窗口的等离子 5小程序 plasma-applet-active-window-control请注意,本项目正在KDE伞下移动。 因此,请在适当的位置进行进一步的翻译或者请求请求: ...
ActivePerl-5.28.1 win10 x64离线安装包(官方),可避免从官网下载速度慢的问题。 ActivePerl-5.28.1 win10 x64离线安装包(官方),可避免从官网下载速度慢的问题。 ActivePerl-5.28.1 win10 x64离线安装包(官方...
《Active MQ in action 教程》是一本深入探讨Apache ActiveMQ消息中间件的实战指南,由Bruce Snyder、Dejan Bosanac与Rob Davies三位作者共同撰写。本书旨在为读者提供全面且深入的理解ActiveMQ及其在实际项目中的...
集成 Druid 后,Spring Boot 应用不仅可以使用高性能的数据库连接池,还能享受到其丰富的监控功能,如监控后台、SQL 执行统计、连接池状态查看等,这些都有助于优化数据库操作,提高系统的整体性能和可维护性。...
在Spring Boot框架中,`druid-spring-boot-starter`是一个便捷的启动器,用于简化Druid的集成过程。通过引入这个启动器,我们可以快速地在Spring Boot项目中配置并使用Druid数据库连接池。`druid-spring-boot-...
在本文中,我们将深入探讨如何将Spring Boot与Hibernate集成,并使用Druid作为数据库连接池。首先,我们需要理解这三个核心组件: 1. **Spring Boot**: 是一个由Pivotal团队提供的开源框架,它简化了创建独立的、...
1. 检查系统兼容性:确保你的Windows版本与提供的ActivePerl版本兼容。 2. 确保管理员权限:运行安装程序时,可能需要以管理员权限进行,以允许修改系统设置。 3. 阅读许可协议:在安装过程中,会显示许可协议,仔细...
在"小码农的代码(一)——SpringJDBC的使用"这篇博文中,我们将探讨SpringJDBC如何帮助我们更好地管理和执行SQL语句。 首先,SpringJDBC提供了一个抽象层,它将传统的JDBC API封装起来,减少了手写模板代码的需求...
active-directory-node-webapi, 使用 Azure AD和 OAuth 2.0访问令牌保护的NodeJS Web API 服务平台作者活动目录nodejsbrandwe使用Azure广告保护 Web API这个 node.js 服务器将为你提供使用OAuth2协议设置 REST API ...
Active4j-boot可能还集成了Spring Boot的特性,如自动配置、内嵌的Tomcat服务器、健康检查接口等。Spring Boot简化了Spring的应用配置,让开发者能够快速启动一个完整的应用。 此外,源码中可能还包括配置文件(如...
Active-Directory-Security-101 手册
因此,`middleware-active-directory`可能具有与ZooKeeper集成的能力,以在分布式环境中高效地处理Active Directory相关的任务。 **Python库** 作为一个Python库,`middleware-active-directory`使得开发者能够...
描述 "Active_Alchemy-1.1.0-py2-none-any.whl.zip" 与标题相同,再次强调了这是Active Alchemy的1.1.0版本,以Python 2为目标平台,并且以Wheel格式封装在.zip文件中。 标签 "whl" 指出这个压缩包包含的是一个...
《Active4j-OA办公系统 V1.0:深度解析与应用探讨》 Active4j-OA办公系统 V1.0 是一款专为企事业单位打造的高效协同办公平台,其核心在于提供便捷的工作流程管理、文档管理以及信息共享等功能,以提升组织内部的...