序
本文主要小结一下artemis的一些知识点
artemis知识点
消息模型
它实现了mqtt、aqmp、stomp协议,jms的api,还提供了rest的api;其模型跟aqmp很像,用address、queue来抽象,其Routing Types有Anycast(
point-to-point
)、Multicast(publish-subscribe
)两种类型
client、server端的flow control
通过credit以及windowSize来控制
client、server端的rebalance
client端有ConnectionLoadBalancingPolicy,server端有MessageLoadBalancingType、Redistributor
client、server端的interceptor
内置了client、server的interceptor,方便拦截添加边缘逻辑
投递模式:at-most-once、at-least-once、exactly-once
exactly-once需要事务支持,不过可以通过服务端去重
消费模型:推、拉、还是推拉结合、ack模式
推拉结合的,同步receive方式就是拉的方式,消费者主动去消息服务器取消息,异步的listener方式为推的方式
特性消息:延迟消息、优先级消息、持久消息、TTL消息、死信消息
延时消息:postOffice添加消息的时候(
持久化消息的话先持久化
)会检查HDR_SCHEDULED_DELIVERY_TIME属性,添加到scheduledReferences,然后进行scheduleDelivery,时间到了就从scheduledReferences移除添加到真正的队列中;server重启的话,会从store中恢复scheduledReferences队列
优先级消息:通过PriorityLinkedList,消息分级存储,取的时候按优先级合并在一起
TTL消息:有个ExpiryScanner来定时检查消息是否过期,过期的话将消息移动到expiry address
cluster、federation
cluster适用于内网,federation适用于公网进行消息复制
ha及failover及发送重试
ha支持replication、shared-store、live-only;failover的时候会对client的session进行转移,让client端保持透明
graceful shutdown
在shutdown的时候做各种资源销毁
logger日志
jboss-logmanager,还支持audit log
rest api
官方还提供了rest api,像kafka是Confluent提供了REST Proxy
metrics支持
内置支持metrics,属于硬编码的方式,提前设计好
docker支持
提供基于centos及ubuntu的docker文件
test支持
有丰富的各种测试,比如junit(
提供了专门的TestRule
)、smoke、stress、timing等
小结
artemis算是系出名门,代码里头很有企业级产品的味道,还值得深入研究研究