1.简介

    Artemis是通过基于netty的非堵塞IO架构开发的,拥有出色的性能。由jboss捐献的HornetQ的衍生版本,可能作为下一代ActiveMQ的存在。

    选择Artemis的原因开源、高可用性、Java编写、高性能的日志保证持久化消息像非持久化消息一样拥有出色的表现、功能齐全、简洁的设计、灵活的集群可以通过不可靠的全球网络创建地理上分布的集群。

    Artemis支持自动故障转移功能,在实时系统服务器故障时会话会自动重新连接到备份服务器。

    通过消息传递系统可以将整个异构应用系统松散的耦合在一起,同时可以提供可靠性、事务和其他许多功能。相较于基于远程过程调用(RPC)模式的系统不同,消息系统主要使用异步消息模式传递,请求和响应之间解耦,消息发送者和消息消费者分离,完全对彼此一无所知。如此可以创建灵活、低耦合的系统。

    异步系统可以最大限度的利用硬件资源,减少IO堵塞线程数量,很好的利用网络带宽资源。消息传递系统通常被用来实现消息总线。

    Artemis不支持Vhost。

2.消息队列功能列表

    点对点消息:通常将消息发送到队列,将消息持久化然后将消息给多个消费者中的一个。当消费者消费完消息后发送一个ack给消息中间件,消息中间件收到ack后将消息从消息队列中标记为已消费或者从队列中移除。

    发布订阅:将消息发送到称为主题(topic)的实体上,一个主题上可以有许多订阅,每个订阅者都能收到发布者的消息。发布订阅分为持久性订阅和非持久性订阅。持久性订阅是会保留发送到主题的每条消息的副本,直到所有订阅者使用它们--即使是服务器崩溃或重新启动。非持久订阅仅持续到创建它们的连接的最长生命周期。

    消息传递可靠性:消息的可靠性有三种传输保障:At most once,至多一次,消息可能丢失但是不会重复发送;At least once,至少一次,消息不会丢失,但是可能会重复;Exactly once,精确一次,每条消息肯定会被传输一次且仅一次。

    事务:事务消息指的是针对事务开始和事务结束期间的全体操作,要不全部成功,要不全部失败。Artemis支持本地的多个消息的发送和确认事务。

    消息持久化:需要持久化的消息存储在磁盘中,不需要持久化的消息存储在内存中。

3.Artemis核心架构

    Artemis服务器都有超高性能的持久化日志,可用于消息和其他内容的持久化。

3.1 Artemis客户端

    Artemis客户端提供两个用于消息传递的API实现:

  • 核心客户端API,位于Artemis内部的core中,允许更多的控制broker功能,还提供了一些其他API没有的复杂功能。
  • JMS2.0客户端API。标准的JMS API可以在客户端使用。

    Artemis还提供了其他协议的支持,如:AMQP、OpenWire、MQTT、STOMP、HornetQ。

    客户端在使用JMS API时,Armetis broker其实对JMS一无所知,只是将客户端的JMS API调用转换成Artemis的core协议,然后传输给broker。

    Artemis的客户端调用关系图如下:

 

3.2 broker使用形式

    Artemis的broker可以根据需求进行独立部署也可以嵌入到自己的应用程序中。

    Artemis的core被设计为一组简单POJO,当你的程序希望使用Artemis内部消息传递功能,但不希望曝光Artemis broker可以将其嵌入到自己的程序中。

   Artemis自己提供了全功能的j2EE连接器架构(JCA)适配器,使其可以轻松的集成到任何符合JAVA EE的应用服务器或者servlet工具中。当JAVA EE应用程序与JMS消息传递系统集成时,建议通过JCA适配器完成此操作,根据Java EE规范,直接与JMS消息传递系统进行通信而不使用JCA将是非法的。可以直接从EJB,MDB或servlet与JMS消息传递系统进行通信而不通过JCA适配器,但是将无法使用JCA功能,如JMS会话缓存,导致性能下降。

    下图在JAVE EE应用中JCA适配器与Artemis集成的架构图,有禁止标志的大箭头显示不建议EJB会话bean直接与Artemis通讯。

 

注:此系列文章为Apache Artemis V2.6.2官方使用文档的简要翻译文档(非完全按照官方文档排版进行翻译,有删减),个人能力有限如有错误请谅解。源文档地址:http://activemq.apache.org/artemis/docs/latest/index.html

 

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐