ActiveMQ知识架构梳理
2021-09-26 16:52:32 0 举报
AI智能生成
ActiveMQ知识架构梳理
作者其他创作
大纲/内容
Linux
安装
ActiveMQ是什么
**异步通信**
**缓冲**
**解耦**
**冗余**
扩展性
过载保护
数据流处理
异构平台
应用场景
ActiveMQ
RabbitMQ
RocketMQ
Kafka
常用消息中间件对比
区别
消息服务器,一个实例,一个节点
Broker
消息提交者,生产者
provider
消息消费者
Consumer
角色
基于点对点的消息模型
p2p
基于订阅/发布的消息模型
pub/sub
消息模型
连接工厂,jms中用它创建连接连接工厂是客户用来创建连接的对象,例如ActiveMQ提供的ActiveMQConnectionFactory。
ConnectionFactory
JMS Connection封装了客户与JMS提供者之间的一个虚拟的连接。
支持多钟连接协议
Connection
队列存储,常用与点对点消息模型 默认只能由唯一的一个消费者处理。一旦处理消息删除。
消息队列
Queue
主题存储,用于订阅/发布消息模型主题中的消息,会发送给所有的消费者同时处理。只有在消息可以重复处 理的业务场景中可使用。
主题
Topic
消息的目的地
Destination
Session是生产和消费消息的一个单线程上下文。会话用于创建消息生产者(producer)、消息消费者(consumer)和消息(message)等。会话提供了一个事务性的上下文,在这个上下文中,一组发送和接收被组合到了一个原子操作中。
Session
JMS中的一些角色
JMS消息头使用的所有方法
自动头信息
手动头信息
消息头
每个消息头字段都有相应的getter和setter方法。
如果需要除消息头字段以外的值,那么可以使用消息属性。
消息属性
JMS定义的消息类型有TextMessage、MapMessage、BytesMessage、StreamMessage和ObjectMessage。
消息体
JMS的消息由以下三部分组成的
文本消息
TextMessage
k/v
MapMessage
字节流
BytesMessage
java原始的数据流
StreamMessage
序列化的java对象
ObjectMessage
消息类型
当客户端成功的从receive方法返回的时候,或者从MessageListener.onMessage方法成功返回的时候,会话自动确认客户收到的消息
AUTO_ACKNOWLEDGE
客户通过消息的acknowledge方法确认消息。需要注意的是,在这种模式中,确认是在会话层上进行:确认一个被消费的消息将自动确认所有已被会话消费的消息。例如,如果一个消息消费者消费了10个消息,然后确认第5个消息,那么所有10个消息都被确认。
CLIENT_ACKNOWLEDGE
该选择只是会话迟钝的确认消息的提交。如果JMS Provider失败,那么可能会导致一些重复的消息。如果是重复的消息,那么JMS Provider必须把消息头的JMSRedelivered字段设置为true。
DUPS_ACKNOWLEDGE
应答模式 ACKNOWLEDGE Mode参数有3个可选值
确认 JMS消息
指示JMS Provider持久保存消息,以保证消息不会因为JMS Provider的失败而丢失。
PERSISTENT
不要求JMS Provider持久保存消息。
NON_PERSISTENT
JMS 支持以下两种消息提交模式:
持久化
可以使用消息优先级来指示JMS Provider首先提交紧急的消息。优先级分10个级别,从0(最低)到9(最高)。如果不指定优先级,默认级别是4。需要注意的是,JMS Provider并不一定保证按照优先级的顺序提交消息。
优先级
可以设置消息在一定时间后过期,默认是永不过期。
消息过期
可以通过会话上的createTemporaryQueue方法和createTemporaryTopic方法来创建临时目的地。它们的存在时间只限于创建它们的连接所保持的时间。只有创建该临时目的地的连接上的消息消费者才能够从临时目的地中提取消息。
临时目的地
首先消息生产者必须使用PERSISTENT提交消息。
客户可以通过会话上的createDurableSubscriber方法来创建一个持久订阅,该方法的第一个参数必须是一个topic,第二个参数是订阅的名称。
JMS Provider会存储发布到持久订阅对应的topic上的消息。
如果最初创建持久订阅的客户或者任何其它客户使用相同的连接工厂和连接的客户ID、相同的主题和相同的订阅名再次调用会话上的createDurableSubscriber方法,那么该持久订阅就会被激活。
JMS Provider会象客户发送客户处于非激活状态时所发布的消息。
持久订阅在某个时刻只能有一个激活的订阅者。持久订阅在创建之后会一直保留,直到应用程序调用会话上的unsubscribe方法。
持久订阅
commit
rollback
本地事务
消息可靠性机制
特性
JMS的消息格式
B-Tree
db.data
db.redo
db-.log
APPEND的方式
lock
KahaDB
AMQ
activemq_msgs
activemq_acks
activemq_lock
表字段解释
dbcp连接池
数据源
JDBC
LevelDB持久化性能高于KahaDB,虽然目前默认的持久化方式仍然是KahaDB。并且,在ActiveMQ 5.9版本提供 了基于LevelDB和Zookeeper的数据复制方式,用于Master-slave方式的首选数据复制方案。 但是在ActiveMQ官网对LevelDB的表述:LevelDB官方建议使用以及不再支持,推荐使用的是KahaDB
LevelDB
Memory
JDBC Message store with ActiveMQ Journal
存储 persistenceAdapter
阻塞式
TCP
异步
NIO
UDP
SSL
Http(s)
VM
连接协议 transportConnector
http://activemq.apache.org/
下载
解压后直接执行`bin/win64/activemq.bat`
安装启动
http://localhost:8161/通过8161端口访问
web控制台
修改 ActiveMQ 配置文件:/usr/local/activemq/conf/jetty.xml**jettyport节点**配置文件修改完毕,保存并重新启动 ActiveMQ 服务。
修改访问端口
maven坐标
sender
Receiver
开发
HelloWorld开发流程
Queues
Topics
Subscribers
Connections
Network
Scheduled
Send
功能
独立jar包的形式运行
集成ActiveMQ
ActiveMQ服务监控 Hawtio
web控制台安全
消息安全机制
Active MQ的安全机制
同步接收阻塞式
consumer.receive()
异步接收
消息监听器
session.commit();
session.rollback();
事务
producer.setPriority
修改配置文件
producer.setTimeToLive
消息超时/过期
API
pom
连接池设置
packages: trust
对象序列化 信任包
yml
Config类
@JmsListener
jmsMessagingTemplate
jmsTemplate
收
发
整合SpringBoot
Shared File System Master Slave
**JDBC Master Slave**
需要使用zookeeper
**Replicated LeveDB Store**
主备集群
静态网络配置
multicast协议动态网络配置
高性能集群
failover 故障转移协议
Transport Options
**可配置选项**
replayWhenNoConsumers
消息回流
消息副本
集群
修改死信队列名称
让非持久化的消息也进入死信队列
过期消息不进死信队列
死信队列
设置优先级
独占消费者
强行异步发送
同步与异步
brokerUrl
destinationUri
producer的producerWindowSize
消息发送原理
配置文件
延迟发送
带间隔的重复发送
Cron表达式定时发送
api
延迟消息投递
selector
消息过滤
queue browser
批量确认
消费缓冲与消息积压/慢消费者 prefetchSize
消息到底是推还是拉?
EIP Camel
QueueRequestor 同步消息
**JMSReplyTo**
JMSCorrelationID
TemporaryQueue
Request/Response模型实现
消费端设置
保留固定字节的消息 fixedSizedSubscriptionRecoveryPolicy
保留固定数量的消息 fixedCountSubscriptionRecoveryPolicy
保留时间 timedSubscriptionRecoveryPolicy
保留最后一条 lastImageSubscriptionRecoveryPolicy
Topic加强 可追溯消息
高级特性
下一代 ActiveMQ 6?Artemis
ActiveMQ如何防止消息丢失?会不会丢消息?
如何防止重复消费
如何保证消费顺序?
Out of memory
直接中断 **AbortSlowConsumerStrategy abortConnection**
设置阈值 AbortSlowConsumerStrategy maxTimeSinceLastAck
SlowConsumerStrategy
constantPendingMessageLimitStrategy
prefetchRatePendingMessageLimitStrategy
消息限制策略 PendingMessageLimitStrategy
慢速消费
消息堆积内存上涨
prefetchSize影响消费倾斜
prefetchSize造成消费者内存溢出
AUTO_ACKNOWLEDGE造成消息丢失/乱序
exclusive 和selector有可能造成消息堆积
常见问题
0 条评论
回复 删除
下一页