一、ActiveMQ 是什么?
ActiveMQ 是 Apache 出品,非常流行的、能力强劲的开源消息总线,虽然现在 kafka、RocketMQ 异军突起,但在 MQ 的江湖里,ActiveMQ 依然占有一席之地。
ActiveMQ 是一个完全支持 JMS1.1和J2EE 1.4规范的 JMS Provider 实现,尽管JMS规范出台已经是很久的事情了,但是JMS在当今的J2EE应用中间仍然扮演者特殊的地位。
二、JMS是什么?
Java消息服务(Java Message Service,即JMS)应用程序接口是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。Java消息服务是一个与具体平台无关的API。
JMS在MQ中,有点类似于JDBC在DB中的位置,只是指定了一个规范和标准,具体实现由厂商开发接入。
1、JMS的对象模型
对象 | 作用 |
---|---|
ConnectionFactory | 连接工厂 |
Connection | 连接 |
Session | 会话 |
Destination | 目的 |
MessageProducer | 生产者 |
MessageConsumer | 消费者 |
Message | 消息 |
Broker | 消息中间件的实例(ActiveMQ) |
连接工厂创建连接,连接创建会话,生产或发送消息前需要明确发送接收的目标,生产者生产消息,消费者消费消息。
2、JMS的消息模型
1)Point-to-Point(P2P)/点对点
2)Public/Subscribe(Pub/Sub)/主题(发布订阅)
3、JMS的消息结构
1)消息头
信息 | 描述 |
---|---|
JMSDestination | 消息的目的地,Topic或者是Queue |
JMSDeliveryMode | 消息的发送模式 |
JMSTimestamp | 消息传递给Broker的时间戳,它不是实际发送的时间 |
JMSExpiration | 消息的有效期,在有效期内,消息消费者才可以消费这个消息 |
JMSPriority | 消息的优先级。0-4为正常的优先级,5-9为高优先级 |
JMSMessageID | 一个字符串用来唯一标示一个消息 |
JMSReplyTo | 有时消息生产者希望消费者回复一个消息,JMSReplyTo为一个Destination,标示需要回复的目的地 |
JMSCorrelationID | 通常用来关联多个Message |
JMSType | 表示消息体的结构,和JMS提供者有关 |
JMSRedelivered | 如果这个值为true,表示消息是被重新发送了 |
2)消息属性
消息属性可以理解为消息的附加消息头,属性名可以自定义,一般是应用附加的一些信息
3)消息体
类型 | 作用 |
---|---|
BytesMessage | 用来传递字节消息 |
MapMessage | 用来传递键值对消息 |
ObjectMessage | 用来传递序列化对象 |
StreamMessage | 用来传递文件 |
TextMessage | 用来传递字符串 |
三、ActiveMQ 的特性
1、支持多种编程语言
提供Java、PHP、C++、Python等语言工具包,使得不同的编程语言都可以使用 ActiveMQ
2、支持多种传输协议
协议 | 作用 |
---|---|
TCP | 消息可靠 |
UDP | 多用于广播 |
SSL | 安全套接层 |
NIO | 连接池复用网络连接提高并发 |
VM | 无需网络传输在VM内部连接 |
HTTP/HTTPS | 提供Restful风格的调用API |
这些传输协议在服务端配置,为消息协议服务,对于客户端来说是透明的,并且支持自由组合,比如TCP + NIO + SSL
,正是这种灵活性使 ActiveMQ 可以用于多种不同场景,促进其流行。
3、有多种持久化方式
支持文件或数据库形式的持久化,是流行的 RabbitMQ、Kafka、RocketMQ、ActiveMQ 中唯一支持持久化到数据库的 MQ。
网友评论