一、消息中间件MOM(Message-Oriented Middleware)

消息中间件是解决异步分布式系统中通讯和排队问题的中间件技术。它利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数据通信来进行分布式系统的集成。通过提供消息传递和消息排队模型,它能够在分布式环境下扩展进程间的通信。

二、JMS

JMS即Java消息服务(Java Message Service)应用程序接口是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。Java消息服务是一个与详细平台无关的API,绝大多数MOM提供商都对JMS提供支持。

JMS 定义了两种方式:Quere(点对点);Topic(公布/订阅)。 ConnectionFactory 是连接工厂,负责创建Connection。 Connection 负责创建 Session。  Session 创建 MessageProducer(用来发消息) 和 MessageConsumer(用来接收消息)。  Destination 是消息的目的地。

三、ActiveMQ

1、概述

ActiveMQ 则是MOM的一个跨语言跨平台实现,它是Apache出品,最流行的、能力强劲的开源消息总线。它完整实现了JMS1.1和J2EE1.4中JMS服务(JSM定义了MOM系统的服务和接口,能够提供可靠的消息传输、事物和过滤等服务),还具备了集群、事物、存储转发、持久化等企业特性。

2、连接方式

ActiveMQ提供了丰富连接方式,依照耦合的紧密程度能够分为:直接内嵌于JBoss等J2EE容器,直接利用AMOP、Openwire等标准协议,通过适配器与Java、C++、AJAX等程序连接以及桥式连接其它JMS。

3、特性及其作用

处理事务性的消息

    ActiveMQ的此种特性主要管理消息的事务以及消息持久化,即使在出错时也不会漏掉一条消息。消息server须要进行信息持久化,一个server集群能够提高其可用性,ActiveMQ正是这种一个高可用性的消息server,典型的情况就是当一个Server Node掉线的时候,它上面的全部消息都会被保存下来,以便在它又一次上线时继续处理。

高性能的数据分发

    ActiveMQ的这个特性主要关注的是消息的吞吐率以及高效的消息投递路由,中心思想就是在一个大的网络中尽可能快的传递大量的而且高速改变的消息数据。

鉴于大量的数据和频繁的数据数据交换负荷非常高,所以这样的情况下非常少使用数据持久化,在失败时丢失几条数据也是能够接受的由于老的数据通常都不再被须要了,最新的数据才是真正我们关心的。

集群和通用的异步消息模型

    ActiveMQ的这样的特性重点在网络延迟和速度,当实现一个web或者EJB集群的时候,目的是维护一个node集群,典型的是使用多点广播来discovery&keep-alive然后使用socket直接连接这些node来进行高效的通信。这和使用JMS provider在EJB-Style或者WS-style的服务中作为RMI层是非常相似的,都能使用多点广播来discovery&keep-alive而且使用socket直接连接通信以降低延迟。所以与其使用不同的server来协调client之间的通信,不如让client直接和彼此通信来降低延迟。

Ps: 此段主要讲的是activeMQ的node之间会有高效的异步通信机制,网络延迟小而且高效

网络数据流

    ActiveMQ的这样的特性关注点是activeMQ的ajax支持,越来越多的人希望数据流能实时的传递到网络浏览器中,比如金融行业的股票价格数据,实时的在展示IM会话,实时拍卖而且动态更新内容和消息。鉴于这样的情况,我们把ActiveMQ集成到了web容器中来提供封闭的网络集成,使用HTTP POSTS来公布消息而且在js中通过HTTP GET来接受并展示消息。

简易的使用HTTP来传递消息的API

    ActiveMQ的这样的特性主要关注跨语言跨技术的连接能力,我们为message broker提供了一个HTTP接口同意跨语言或者技术来进行简单的发送和接受消息。使用HTTP POST将消息发送到message broker,使用HTTP GET从message broker获取消息,使用URI而且指定參数来决定接受/发送的目的地。

4、系统架构

ActiveMQ内部实现採用的是分层和插件相结合的系统架构,从内到外一共能够分为三层,各自是JMS核心层、接口层和插件层。

JMS核心层:是JMSserver端的实现,完整支持JMS1.1和J2EE1.4规范,能够部署到不论什么兼容J2EE1.4以上的J2EE容器上。

接口层: 对外提供接口。能够分为通信接口、消息保存接口和网络服务接口三个子模块。

通信接口负责网络连接和消息传输,通过分布式命令模式解除了消息内容和通信载体的紧耦合关心,以便于消息在网络中进行传输。它与各种协议插件一起完毕消   息在JMSclient与server端和不同JMS之间的传输,因为插件应用层次的不同ActiveMQ拥有三种自底向下的网络通信能力:TCP、UDP、SSL、NIO、JATX等底层络传输;OpenWire、Stomp Rest、WS Notification、XMPP、AMQP等标准协议链路;Java、C、C++、C#、Ruby、Perl、Python、PHP、AJAX等语言级交互通道。

消息保存接口能够支持内存、文件、内嵌数据库和外部数据库等四种消息持久化方式。

网络服务接口是高级功能的接口,支持存储转发、集群、命令服务等。

插件层:由不同的 插件构成向外提供队列、集群等服务。

5、核心数据流

JMS是发送消息的java中发送消息的中间件,包含5中数据流: ·

StreamMessage -- Java原始值的数据流 ·

MapMessage--一套名称-值对 ·

TextMessage--一个字符串对象 ·

ObjectMessage--一个序列化的 Java对象 ·

BytesMessage--一个未解释字节的数据流

开源消息总线ActiveMQ的更多相关文章

  1. 消息队列-ActiveMQ

    1 业务需求描述 举例描述: 再警情通报的业务时通过发送消息界面可以选择 警情联络,和船情通报两种消息 发送方式可分为 一对一发送:部门对部门.个人对个人 一对多发送:部门对多部门.个人对多人 2 功 ...

  2. 消息队列ActiveMQ的使用详解

    通过上一篇文章 <消息队列深入解析>,我们已经消息队列是什么.使用消息队列的好处以及常见消息队列的简单介绍. 这一篇文章,主要带大家详细了解一下消息队列ActiveMQ的使用. 学习消息队 ...

  3. 消息队列—ActiveMQ

    1.   学习计划 1.什么是MQ 2.MQ的应用场景 3.ActiveMQ的使用方法. 4.使用消息队列实现商品同步. 2.   同步索引库分析 方案一:在manager(后台)中,添加商品的业务逻 ...

  4. 消息队列ActiveMQ

    什么是ActiveMQ ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线.ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provider实现,尽管 ...

  5. 几款开源ESB总线的比较

    现有的开源ESB总线中,自从2003年第一个开源总线Mule出现后,现在已经是百花争鸣的景象了.现在我就对现有的各种开源ESB总线依据性能.可扩展性.资料文档完整程度以及整合难易程度等方面展开. CX ...

  6. 现有一些开源ESB总线的比較

    现有的开源ESB总线中,自从2003年第一个开源总线Mule出现后,如今已经是百花争鸣的景象了.如今我就对现有的各种开源ESB总线根据性能.可扩展性.资料文档完整程度以及整合难易程度等方面展开. 一. ...

  7. 几款开源ESB总线的比较(转)

    现有的开源ESB总线中,自从2003年第一个开源总线Mule出现后,现在已经是百花争鸣的景象了.现在我就对现有的各种开源ESB总线依据性能.可扩展性.资料文档完整程度以及整合难易程度等方面展开. CX ...

  8. 第九章 消息总线: Spring Cloud Bus

    在微服务架构的系统中, 我们通常会使用轻量级的消息代理来构建一个共用的消息主题让系统中所有微服务实例都连接上来, 由于该主题中产生的消息会被所有实例监听和消费, 所以我们称它为消息总线. 在总线上的各 ...

  9. SpringCloud Bus消息总线

    在微服务架构中,通常会使用轻量级的消息代理来构建一个共用的消息主题来连接各个微服务实例,它广播的消息会被所有在注册中心的微服务实例监听和消费,也称消息总线. SpringCloud中也有对应的解决方案 ...

随机推荐

  1. 国内5款优秀的WEB前端框架

    1. JX(腾讯) 官网地址:http://alloyteam.github.io/JX/#home JX 是一个类似 Google Closure Library 的 Web 前端开发框架,服务于 ...

  2. opendrive.com提供的免费网盘

    opendrive.com是由以前freehao123给大家介绍的BOXSTr免费网络硬盘演变而来的,现在BOXSTr已经无法使用了.打开BOXSTr网站就会自动跳转到opendrive.com网站. ...

  3. 线性表的Java实现

    一.概念 对于常用的数据结构,可分为线性结构和非线性结构,线性结构主要是线性表,非线性结构主要是数和图.当n>0时,表可表示为:(a0,a1,a2,a3,…an) 1. 线性表的特征: 1.存在 ...

  4. 安装oracle客户端(navicat for oracle)

    本文使用Navicat for Oracle工具连接oracle 安装的过程我就不在此赘述,跟一般软件的安装过程类似.下面主要讲解Navicat的配置. 1.启动该工具,出现如下的开始界面,单击“连接 ...

  5. C语言当中的作用域

    在C语言当中,变量的作用域分为两种:全局变量和局部变量. 在所有函数之外声明的变量是全局变量,这些变量可以在整个程序当中被访问: 局部变量是在某一对大括号({})之间生命的变量,这些变量在这对大括号之 ...

  6. HBase 1、HBase介绍和工作原理

    HBase是一个分布式的.面向列的开源数据库,该技术来源于 Fay Chang 所撰写的Google论文“Bigtable:一个结构化数据的分布式存储系统”.就像Bigtable利用了Google文件 ...

  7. SQLite.dll混合模式程序集是针对“v2.0.50727”版的运行时生成的,在没有配置其他信息的情况下,无法在 4.0 运行时中加载该程序集。

    其他信息: V5.7.4.4 Can't find the System.Data.SQLite.dll more info : 混合模式程序集是针对"v2.0.50727"版的运 ...

  8. WCF Test Client

    WCF测试客户端(WCF Test Client)是一个用来测试WCF服务程序的调试工具,能够使开发WCF服务更加方便. 在Visual Studio之外打开WCF测试客户端有两种方法:第一种方法是到 ...

  9. 【转】jQuery on()选择器函数

    on()函数用于为指定元素的一个或多个事件绑定事件处理函数. 此外,你还可以额外传递给事件处理函数一些所需的数据. 从jQuery 1.7开始,on()函数提供了绑定事件处理程序所需的所有功能,用于统 ...

  10. I/O重定向与管道

    1.输出重定向 (1)>  覆盖输出 (2)>>  追加输出 (3) set -C: 禁止对已经存在文件使用覆盖重定向: 强制覆盖输出,则使用 >| set +C: 关闭上述功 ...