架构师之ActiveMQ总结报告

架构师之ActiveMQ总结报告

总结了一下ActiveMQ的关键技术点,以及与spring boot的集成应用,形成一个总结报告,一个是为了指导新手从哪些方面入手,另外是技术人员熟悉关键技术点,用来巩固加深印象。

ActiveMQ 关键技术点及与 Spring Boot 集成应用总结报告一、ActiveMQ 概述ActiveMQ 是一个开源消息中间件,支持多种消息协议(如 JMS、AMQP、MQTT)和传输模式,适用于异步通信、系统解耦和流量削峰。核心特性包括:

多协议支持:兼容 JMS 1.1/2.0、STOMP、OpenWire 等协议。

持久化机制:消息持久化到数据库或文件系统,防止数据丢失。

高可用性:通过主从架构(Master-Slave)和网络集群(Network of Brokers)实现故障转移。

二、ActiveMQ 关键技术点1. 消息模型 点对点(Queue):消息由单个消费者消费,支持负载均衡。

发布订阅(Topic):消息广播给所有订阅者,支持临时订阅(Durable Subscriber)防止消息丢失。

2. 消息持久化 KahaDB:默认持久化存储,基于文件的高性能日志存储。

JDBC 存储:将消息持久化到数据库(如 MySQL),便于跨节点恢复。

LevelDB:高性能键值存储(已弃用,推荐 KahaDB)。

3. 消息确认机制 AUTO_ACKNOWLEDGE:自动确认(默认)。

CLIENT_ACKNOWLEDGE:客户端手动确认。

SESSION_TRANSACTED:事务会话,支持批量提交或回滚。

4. 高可用与集群 主从架构:

共享存储主从:基于共享文件系统(如 NFS)或数据库实现故障切换。

复制主从:通过 ZooKeeper 协调节点选举(如 ActiveMQ Artemis)。

网络集群(Network of Brokers):跨 Broker 消息路由,支持负载均衡和消息分流。

5. 安全机制 认证授权:通过 JAAS 或 Simple Authentication Plugin 配置用户角色权限。

SSL/TLS 加密:保护消息传输通道安全。

消息内容加密:对消息体进行 AES 等加密处理。

6. 性能优化 预取限制(Prefetch Limit):控制消费者单次获取消息数量,避免消息堆积。

异步发送:启用 useAsyncSend=true 提升生产者吞吐量。

死信队列(DLQ):处理无法投递的消息,避免阻塞正常队列。

三、ActiveMQ 与 Spring Boot 集成应用1. 集成场景 异步任务处理:解耦耗时操作(如邮件发送、文件处理)。

系统间通信:跨服务数据同步(如订单状态更新)。

流量削峰:缓冲高并发请求(如秒杀活动)。

2. 核心集成方案Step 1:添加依赖与配置引入 Spring Boot Starter:

代码语言:javascript复制

org.springframework.boot

spring-boot-starter-activemq

org.apache.activemq

activemq-pool

5.16.5

配置连接参数:

代码语言:javascript复制spring:

activemq:

broker-url: tcp://localhost:61616

user: admin

password: admin

pool:

enabled: true

max-connections: 10 # 连接池最大连接数 Step 2:定义消息生产者使用 JmsTemplate 发送消息:

代码语言:javascript复制@Component

public class MessageProducer {

@Autowired

private JmsTemplate jmsTemplate;

// 发送到 Queue

public void sendToQueue(String message) {

jmsTemplate.convertAndSend("my-queue", message);

}

// 发送到 Topic

public void sendToTopic(String message) {

jmsTemplate.setPubSubDomain(true); // 切换为 Topic 模式

jmsTemplate.convertAndSend("my-topic", message);

jmsTemplate.setPubSubDomain(false); // 恢复默认 Queue 模式

}

} Step 3:定义消息消费者使用 @JmsListener 注解监听消息:

代码语言:javascript复制@Component

public class MessageConsumer {

// 监听 Queue

@JmsListener(destination = "my-queue")

public void handleQueueMessage(String message) {

System.out.println("Received from Queue: " + message);

}

// 监听 Topic

@JmsListener(destination = "my-topic", containerFactory = "topicListenerFactory")

public void handleTopicMessage(String message) {

System.out.println("Received from Topic: " + message);

}

}

// 配置 Topic 监听容器工厂

@Configuration

public class JmsConfig {

@Bean

public JmsListenerContainerFactory topicListenerFactory(ConnectionFactory connectionFactory) {

DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();

factory.setConnectionFactory(connectionFactory);

factory.setPubSubDomain(true); // 启用 Topic 模式

return factory;

}

} Step 4:事务管理通过 @Transactional 注解实现消息事务:

代码语言:javascript复制@Transactional

public void processOrder(Order order) {

// 业务逻辑处理

orderService.save(order);

// 发送消息(事务提交后发送)

jmsTemplate.convertAndSend("order-queue", order.getId());

} 3. 高级集成方案消息转换器:自定义 JSON 消息序列化:

代码语言:javascript复制@Bean

public MessageConverter jacksonJmsMessageConverter() {

MappingJackson2MessageConverter converter = new MappingJackson2MessageConverter();

converter.setTargetType(MessageType.TEXT);

converter.setTypeIdPropertyName("_type");

return converter;

}

// 配置 JmsTemplate

@Bean

public JmsTemplate jmsTemplate(ConnectionFactory connectionFactory) {

JmsTemplate jmsTemplate = new JmsTemplate(connectionFactory);

jmsTemplate.setMessageConverter(jacksonJmsMessageConverter());

return jmsTemplate;

} 死信队列处理:

代码语言:javascript复制@JmsListener(destination = "DLQ")

public void handleDlqMessage(Message message) {

// 记录日志或重试逻辑

} 4. 安全与监控启用 SSL:

代码语言:javascript复制spring:

activemq:

broker-url: ssl://localhost:61617 监控控制台:访问 ActiveMQ Web Console(默认 http://localhost:8161/admin)。

四、实践建议与常见问题1. 新手入门建议 学习路径:

理解 JMS 规范与消息模型(Queue/Topic);

掌握 ActiveMQ 控制台操作与监控;

通过 Spring Boot 实现消息生产与消费;

进阶学习事务、集群和高可用配置。

工具推荐:

ActiveMQ Web Console(内置监控)

JMeter(压测消息吞吐量)

2. 常见问题 消息堆积:增加消费者数量或优化处理逻辑。

连接超时:检查防火墙设置或调整连接池参数(如 idle-timeout)。

事务不生效:确保 @Transactional 注解应用于 public 方法,并启用事务管理器。

3. 优化方向 集群扩展:通过 Network of Brokers 实现水平扩展。

消息压缩:启用 useCompression=true 减少网络传输量。

异步消费:使用 @JmsListener 的 concurrency 参数提升并发处理能力。

五、总结ActiveMQ 作为成熟的消息中间件,与 Spring Boot 集成可快速构建可靠、松耦合的分布式系统。开发者需重点关注:

消息模型选择:根据场景选用 Queue 或 Topic。

高可用设计:主从架构与集群配置保障服务稳定性。

性能与安全平衡:通过连接池、异步发送和 SSL 加密优化系统。

通过合理配置 JmsTemplate 和 @JmsListener,可简化消息生产与消费逻辑。实际应用中需结合监控工具跟踪消息堆积和延迟,并定期清理无效队列防止资源浪费。

本篇的分享就到这里了,感谢观看,如果对你有帮助,别忘了点赞+收藏+关注。

相关推荐

青蛙冬天会冬眠,不吃不喝也不死,是它身体里的 “能量” 能存好久吧?
榴莲为什么自己会开裂 原因和解决方法
365体育平台网址

榴莲为什么自己会开裂 原因和解决方法

📅 01-26 👁️ 5714
《杂病治例》明朝版-疸 – 传统中医
365体育平台网址

《杂病治例》明朝版-疸 – 传统中医

📅 12-29 👁️ 6086