ActiveMQ简介

概要

  • 开源
  • JMS-compliant
  • 消息中间件message-oriented middleware(MOM)
  • 松耦合,相对于RPC的紧耦合
  • 发送消息fire-and-forget
  • EDA(event-driven architecture)
  • SOA(serive-oriented architecture)
  • CEP(complex event processing)

特性

  • JMS的实现

    • 同步、异步消息delivery
    • once-and-only-once消息delivery
    • 为订阅者提供的消息durability
  • Connectivity
    • 支持广泛的协议,包括HTTP/S,IP multicast,SSL,STOMP,TCP,UDP,XMPP,MQTT等等
    • transport connectorsnetwork connectors
  • Pluggable persistent
    • ActiveMQ提供了快速消息持久化KahaDB
    • ActiveMQ也支持JDBC数据库持久化
  • Pluggable security
    • security包含authenticationauthorization
    • ActiveMQ提供简单的基于properties files认证和授权,以及JAAS登录模块
  • JAVA开发(用JMS spec APIs)
  • 与应用服务器集成
    • 将ActiveMQ与诸如Apache TomcatJettyApache GeronimoJBoss等服务器整合
  • 广泛的client APIs
    • ActiveMQ的客户端实现可以是C/C++.NETPerlPHPPythonRuby等语言
  • Broker集群
  • 高级broker特性与client
    • ActiveMQ支持在broker的xml配置文件里使用Apache Camel
  • 非常简单的管理
    • 通过基于JMX的JConsole或ActiveMQ web console
    • 处理ActiveMQ advisory messages
    • 执行命令行脚本
    • 监控不同的日志

搭建ActiveMQ

Ant

  • 官网
  • 搭建步骤
  • 要点
    • 配置JAVA_HOMEANT_HOMEPATHANT_OPTS(可选),不能配置CLASSPATH
    • ant -diagnostics用于纠错

ActiveMQ

JMS规范

JMS clients

  • MessageProducer用于发送消息

    • Session.createProducer()指定destination
    • send()可指定destination
    • close()关闭
  • MessageConsumer用于消费消息
    • Session.createConsumer()只能在此指定destination
    • receive()同步接收
    • sageListener.onMessage()异步接收

JMS provider

  • MOM

JMS message

JMS message分为headerspayload两部分

headers如下表格所列

参数名 描述
JMSDestination send时自动设置
JMSDeliveryMode 默认persistent deliver,只能once and only once
nonpersistent deliver只能at most once
delivery mode能够针对消息独立设置
JMSExpiration 可通过MessageProducer.setTimeToLive()或全局设置或 MessageProducer.send()独立设置
值为0永不过期
JMSMessageID 用于区别provider分发的消息
可通过MessageProducer.setDisableMessageID() 建议ProviderJMSMessageID为null
JMSPriority 消息的重要性,从0到9逐级增高
0~4属于normal
5~9属于expedited
JMS Provider通常会优先分发高priority的消息
JMSTimestamp provider收到消息的时间
可通过MessageProducer.setDisableMessageTimestamp()建议ProviderJMSTimestamp为0
JMSCorrelationID 关联当前消息与上一消息,通常用于关联请求与接收
前缀标准为ID:
JMSReplyTo 指定回复送达的destination
JMSType 指定消息类型,非payload类型,鲜用
JMSRedelivered 表示当前消息是重发之前未被确认的消息

properties:属于headers,存储JAVA原生数据类型。含有如下两种:

custom properties:自定义属性

jms-defined properties:以JMSX为前缀的可选属性

  • JMSXAppID:标志发送消息的应用
  • JMSXConsumerTXID:被消费消息的事务标识
  • JMSXDeliveryCount:消息分发尝试次数
  • JMSXGroupID:标识消息组
  • JMSXGroupSeq:消息在组中的序列号
  • JMSXProducerTXID:被生产的消息的事务标识
  • JMSXRcvTimestamp:provider分发消息给consumer的时间
  • JMSXState:与provider相关的时间
  • JMSXUserID:标识发送消息的用户
  • provider-specific properties:JMS_<vendor-name>的provider特定属性,只应使用于non-JMS clients

Message Selectors

  • 根据headersproperties筛选consumer预期接收的消息。
  • 基于SQL92子集的条件表达式,表达式为真表示符合预期
  • 不能关联payload
  • 示例
String selector = "SYMBOL IN ('AAPL', 'CSCO') AND PRICE > " + getPreviousPrice() + " AND PE_RATIO < " + getCurrentAcceptedPriceToEarningsRatioThreshold();
MessageConsumer consumer = session.createConsumer(destination, selector);
  • payload类型包含

    • Message:用于不含payload的消息
    • TextMessage:含String的消息
    • MapMessage:键值对消息,键是String,值是Java基本类型
    • BytesMessage:含byte数组的消息
    • StreamMessage:Java基本类型的流,支持串行化读写
    • ObjectMessage:含序列号的Java对象,包括集合

JMS domains

  • point-to-point

    • destination是queue
    • 可同步可异步
    • once-and-only-once消息delivery
    • 单个consumer接收,多个consumer注册也仅有单个consumer接收并确认
  • publish/subscribe
    • destination是topic
    • 可同步可异步
    • topic默认不存储消息
    • 使用durable subscription可以让provider在consumer离线时保存所有未能发送的消息,在consumer上线发送所有存储的消息
    • 多个consumer接收
  • durability
    • durability仅用于pub/sub domain
    • durable subscription是infinite,nondurable subscription是finite
    • durable subscription只有在consumer显式离线或消息过期时,provider才会扔掉存储的消息
  • persistence
    • 与domain无关
    • 受message producer的setDeliveryMode方法控制
  • request/reply
    • JMSReplyTo指定reply发送的destination
    • JMSCorrelationID指定了request的JMSMessageID
    • QueueRequestorTopicRequestor提供了单请求-单回复的实现,单请求-多回复需要自行实现

Administered objects

  • ConnectionFactory

    • 一个connection通常代表一个TCP socket
    • connection被client用于创建javax.jms.Session
  • Destination
    • Session创建,生命周期等同于Connection
    • Temporary destinations对于Connection是独一无二的

ActiveMQ入门的更多相关文章

  1. ActiveMQ入门练习

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

  2. jms - activeMQ入门案例

    activeMQ入门案例 叨叨一波,很久没写博客了,最近比较慢,时间抽不出来,这个借口说的很尴尬...我知道作为一名合格的码农就必须养成每天一博客的习惯.希望友友们别像我这样懒,闲话不多时进入今天的主 ...

  3. ActiveMQ 入门Nodejs版

    ActiveMQ 入门下载与安装 官方下载地址 解压,运行bin/win[32|64]/activemq[.bat] 启动服务 环境信息 控制台: http://localhost:8161 默认端口 ...

  4. 深入浅出 JMS(二) - ActiveMQ 入门指南

    深入浅出 JMS(二) - ActiveMQ 入门指南 上篇博文深入浅出 JMS(一) – JMS 基本概念,我们介绍了消息通信的规范JMS,这篇博文介绍一款开源的 JMS 具体实现-- Active ...

  5. ActiveMQ之一--ActiveMQ入门

    MQ的消费-生产者模型的一个典型的代表,一端往消息队列中不断的写入消息,而另一端则可以读取或者订阅队列中的消息.MQ和JMS类似,但不同的是JMS是SUN JAVA消息中间件服务的一个标准和API定义 ...

  6. ActiveMQ介绍和ActiveMQ入门实例

    ActiveMQ百度百科   ActiveMQ入门实例-cnblogs.com      作者用的是5.5的版本,我测试时用的是5.6,按照作者说的整了一下,走得通

  7. ActiveMQ 入门和与 Spring 整合

    ActiveMQ 入门演示 activemq 依赖 <dependency> <groupId>org.apache.activemq</groupId> < ...

  8. ActiveMQ入门系列三:发布/订阅模式

    在上一篇<ActiveMQ入门系列二:入门代码实例(点对点模式)>中提到了ActiveMQ中的两种模式:点对点模式(PTP)和发布/订阅模式(Pub & Sub),详细介绍了点对点 ...

  9. ActiveMQ入门系列二:入门代码实例(点对点模式)

    在上一篇<ActiveMQ入门系列一:认识并安装ActiveMQ(Windows下)>中,大致介绍了ActiveMQ和一些概念,并下载.安装.启动他,还访问了他的控制台页面. 这篇,就用代 ...

  10. Java消息中间件----ActiveMQ入门①

    一 首先到ActiveMQ下载安装包 Active官网地址http://activemq.apache.org/activemq-5150-release.html 如图所示,有两个下载的链接,我们下 ...

随机推荐

  1. hideSoftInputFromWindow

    有的时候会碰到软键盘不好关闭,然后就去调界面代码,发现不行,说到底还是对软键盘不熟悉的原因,软键盘windowSoftInputMode有很多种 如果你默认的activity的模式为默认的,或者sta ...

  2. Android数据库相关整理

    今天对Android中数据库相关的操作和代码做了一个整理,便于自己之后的查阅.主要内容有: 1.原生数据库写法 2.终端进sqlite的操作 3.第三方库 4.事务处理 5.权限和路径 一.原生数据库 ...

  3. 多War项目中静态文件的共享方案

    [原创申明:文章为原创,欢迎非盈利性转载,但转载必须注明来源] 在互联网产品中,一般会有多个项目(Jar.WAR)组成一个产品线.这些WAR项目,因为使用相同的前端架构(jQuery.easyui等) ...

  4. T-SQL 去除特定字段的前导0

    在工作过程中遇到一个需求,要从特定字段中删除前导零,这是一个简单的VARCHAR(10)字段. 例如,如果字段包含"00001A",则SELECT语句需要将数据返回为"1 ...

  5. linux基本知识

    1.默认不写端口号就是80端口   127.0.0.1.localhost都代表本机 2.linux下的用户管理: id:可以查看当前用户whoami:查看当前的用户who:看当前已经登录的用户w:也 ...

  6. Newtonsoft.Json, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b9a188c8922137c6

    未能加载文件或程序集“Newtonsoft.Json, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b9a188c8922137c6”或它的某一个 ...

  7. Geeklink引领智慧新生活!

    煤油灯成为古董,管道天然气进入厨房,电脑挤进生活,手机代替书信成为通讯的主要工具-这些变化无不提醒我们,时代在变迁,科技在发展.而最近朋友圈和电视又在播报智能家居的生活方式-智能家电能实现怎样的情景功 ...

  8. AC日记——二叉堆练习3 codevs 3110

    3110 二叉堆练习3  时间限制: 3 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解       题目描述 Description 给定N(N≤500,000)和N个整 ...

  9. 嵌入式Linux驱动学习之路(二十五)虚拟网卡驱动程序

    一.协议栈层次对比 设备无关层到驱动层的体系结构 1).网络协议接口层向网络层协议提供提供统一的数据包收发接口,不论上层协议为ARP还是IP,都通过dev_queue_xmit()函数发送数据,并通过 ...

  10. redis 学习笔记(7)-cluster 客户端(jedis)代码示例

    上节学习了cluster的搭建及redis-cli终端下如何操作,但是更常用的场景是在程序代码里对cluster读写,这需要redis-client对cluster模式的支持,目前spring-dat ...