[ActiveMQ之三] ActiveMQ 入门简介

一、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)/点对点

[ActiveMQ之三] ActiveMQ 入门简介_第1张图片


2)Public/Subscribe(Pub/Sub)/主题(发布订阅)

[ActiveMQ之三] ActiveMQ 入门简介_第2张图片



3、JMS的消息结构

[ActiveMQ之三] ActiveMQ 入门简介_第3张图片

1)消息头

信息 描述
JMSDestination 消息的目的地,Topic或者是Queue
JMSDeliveryMode 消息的发送模式
JMSTimestamp 消息传递给Broker的时间戳,它不是实际发送的时间
JMSExpiration 消息的有效期,在有效期内,消息消费者才可以消费这个消息
JMSPriority 消息的优先级。0-4为正常的优先级,5-9为高优先级
JMSMessageID 一个字符串用来唯一标示一个消息
JMSReplyTo 有时消息生产者希望消费者回复一个消息,JMSReplyTo为一个Destination,标示需要回复的目的地
JMSCorrelationID 通常用来关联多个Message
JMSType 表示消息体的结构,和JMS提供者有关
JMSRedelivered 如果这个值为true,表示消息是被重新发送了


2)消息属性
  消息属性可以理解为消息的附加消息头,属性名可以自定义,一般是应用附加的一些信息

[ActiveMQ之三] ActiveMQ 入门简介_第4张图片


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。

你可能感兴趣的:([ActiveMQ之三] ActiveMQ 入门简介)