初探Apache ActiveMQ

Posted SV杂谈窝

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了初探Apache ActiveMQ相关的知识,希望对你有一定的参考价值。

一、前言

先来说一说消息队列,顾名思义,消息队列是按一定顺序存放消息的容器。为什么会有这种东西呢,我们来看这样一个场景:在微信出现之前,也就是短信还非常普及的时代,我们通过短信与他人进行沟通。平时没有什么,发送了的消息几乎马上会被对方。但是如果很多人给你发短信,举个非常极端的例子,大年三十晚上发短信祝福的时候,往往会很久很久才会收到信息。没有收到之前信息在哪里呢,自然是有一个消息队列装载这些消息。 
另一方面,使用消息队列还有一个好处就是,可以将两个系统进行解耦,尤其对于高并发并且多个系统处理效率不一致的情况,使用消息队列可以增大系统的吞吐量和效率。

作为一个JAVA开发人员,比较熟悉的消息队列中间件就是Apache的ActiveMQ,下面对其进行介绍。

二、术语名词

名词 英文全称 缩写 解释
生产者 MessageProvider Provider 产生或发送消息的系统
消费者 MessageConsumer Consumer 处理或接收消息的系统
点对点 Point to Point P2P 点对点消息模型
发布/订阅 Publish/Subscribe Pub/Sub 发布/订阅消息模型
连接工厂 ConnectionFactory —— 创建消息连接的工厂类
连接 Connection —— 用于接发消息的连接
会话 Session —— 由Connection创建,一个接发消息的会话
消息目的地 Destination —— 由Session创建,消息发送的目的地
队列 Queue —— 用于点对点消息模型
主题 Topic —— 用于发布/订阅模型


三、消息模型

所谓消息模型,就是消息发送和接收的模式。在ActiveMQ中,分为两种消息模式,点对点消息模型和发布/订阅消息模型。 

初探Apache ActiveMQ

点对点模型

点对点消息模型就是一个生产者产生的消息,最终会由一个消费者去消费。在ActiveMQ中,对于同一个Destination,发送的消息放在同一个Queue中,消费者在消息发布之前不需要进行监听,当消费者从消息队列获取消息时,会根据现有的Queue按照获取的优先级获取消息。而且可以配置何时确认Queue消息被消耗。

发布/订阅模型

发布/订阅模型则不是,一个生产者发出的消息可能被多个消费者消费。在ActiveMQ中,对于同一个Destination,会产生一个Topic,当生产者产线消息后,直接进行发布。消费者需要提前进行监听,消息发布后,会自动接收消息。如果消息发布的时候没有任何一个消费者监听,那这个消息将不会被任何消费者消费。

四、消息协议

息协议,是指发送消息的校验格式或者说是传输数据结构,ActiveMQ在官方的例子中,一共包含如下四种消息协议:

1. AMQP协议

Advanced Message Queuing Protocol,被设计为当前流行消息中间件的开放替代品,它的可靠性和互用性是使用它的两个原因。它提供了与消息传递相关的各种功能,包括可靠的排队,基于主题的发布和订阅消息传递,灵活的路由,事务和安全性等。

2. MQTT协议

Message Queue Telemetry Transport,最初是IBM的普遍计算技术团队和其工业部门的合伙人开发的,之后移入开源社区,并被移动应用中流行起来。

3. Openwire协议

这个协议是Apache自己的跨语言线路协议,来让不同的开发语言和平台使用ActiveMQ。

4. stomp协议

Simple/Streaming Text Oriented Messaging Protocol,是基于文本的消息协议,更加类似于HTTP。

五、Hello World

见原文

以上是关于初探Apache ActiveMQ的主要内容,如果未能解决你的问题,请参考以下文章

Apache Lucene初探

ActiveMQActiveMQ 传输协议

apache Flink初探

Mapreduce atop Apache Phoenix (ScanPlan 初探)

Apache IoTDB分布式架构初探

初探Apache ActiveMQ