ActiveMQ入门
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 connectors和network connectors
- Pluggable persistent
- ActiveMQ提供了快速消息持久化KahaDB
- ActiveMQ也支持JDBC数据库持久化
- Pluggable security
- security包含authentication和authorization
- ActiveMQ提供简单的基于properties files认证和授权,以及JAAS登录模块
- JAVA开发(用JMS spec APIs)
- 与应用服务器集成
- 将ActiveMQ与诸如Apache Tomcat、Jetty、Apache Geronimo、JBoss等服务器整合
- 广泛的client APIs
- ActiveMQ的客户端实现可以是C/C++、.NET、Perl、PHP、Python、Ruby等语言
- Broker集群
- 高级broker特性与client
- ActiveMQ支持在broker的xml配置文件里使用Apache Camel
- 非常简单的管理
- 通过基于JMX的JConsole或ActiveMQ web console
- 处理ActiveMQ advisory messages
- 执行命令行脚本
- 监控不同的日志
搭建ActiveMQ
Ant
ActiveMQ
- 官网
- 启动activemq.bat start
- 停止activemq.bat stop
- 控制台网址http://0.0.0.0:8161/admin
- 控制台用户conf/jetty-real.properties
JMS规范
JMS clients
- MessageProducer用于发送消息
Session.createProducer()指定destinationsend()可指定destinationclose()关闭
- MessageConsumer用于消费消息
Session.createConsumer()只能在此指定destinationreceive()同步接收sageListener.onMessage()异步接收
JMS provider
- MOM
JMS message
JMS message分为headers与payload两部分
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() 建议Provider置JMSMessageID为null |
| JMSPriority | 消息的重要性,从0到9逐级增高 0~4属于normal 5~9属于expedited JMS Provider通常会优先分发高priority的消息 |
| JMSTimestamp | provider收到消息的时间 可通过 MessageProducer.setDisableMessageTimestamp()建议Provider置JMSTimestamp为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
- 根据headers与properties筛选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
- QueueRequestor与TopicRequestor提供了单请求-单回复的实现,单请求-多回复需要自行实现
Administered objects
- ConnectionFactory
- 一个connection通常代表一个TCP socket
- connection被client用于创建
javax.jms.Session
- Destination
Session创建,生命周期等同于ConnectionTemporary destinations对于Connection是独一无二的
ActiveMQ入门的更多相关文章
- ActiveMQ入门练习
ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线.ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provider实现,尽管JMS规范出台已经是很久 ...
- jms - activeMQ入门案例
activeMQ入门案例 叨叨一波,很久没写博客了,最近比较慢,时间抽不出来,这个借口说的很尴尬...我知道作为一名合格的码农就必须养成每天一博客的习惯.希望友友们别像我这样懒,闲话不多时进入今天的主 ...
- ActiveMQ 入门Nodejs版
ActiveMQ 入门下载与安装 官方下载地址 解压,运行bin/win[32|64]/activemq[.bat] 启动服务 环境信息 控制台: http://localhost:8161 默认端口 ...
- 深入浅出 JMS(二) - ActiveMQ 入门指南
深入浅出 JMS(二) - ActiveMQ 入门指南 上篇博文深入浅出 JMS(一) – JMS 基本概念,我们介绍了消息通信的规范JMS,这篇博文介绍一款开源的 JMS 具体实现-- Active ...
- ActiveMQ之一--ActiveMQ入门
MQ的消费-生产者模型的一个典型的代表,一端往消息队列中不断的写入消息,而另一端则可以读取或者订阅队列中的消息.MQ和JMS类似,但不同的是JMS是SUN JAVA消息中间件服务的一个标准和API定义 ...
- ActiveMQ介绍和ActiveMQ入门实例
ActiveMQ百度百科 ActiveMQ入门实例-cnblogs.com 作者用的是5.5的版本,我测试时用的是5.6,按照作者说的整了一下,走得通
- ActiveMQ 入门和与 Spring 整合
ActiveMQ 入门演示 activemq 依赖 <dependency> <groupId>org.apache.activemq</groupId> < ...
- ActiveMQ入门系列三:发布/订阅模式
在上一篇<ActiveMQ入门系列二:入门代码实例(点对点模式)>中提到了ActiveMQ中的两种模式:点对点模式(PTP)和发布/订阅模式(Pub & Sub),详细介绍了点对点 ...
- ActiveMQ入门系列二:入门代码实例(点对点模式)
在上一篇<ActiveMQ入门系列一:认识并安装ActiveMQ(Windows下)>中,大致介绍了ActiveMQ和一些概念,并下载.安装.启动他,还访问了他的控制台页面. 这篇,就用代 ...
- Java消息中间件----ActiveMQ入门①
一 首先到ActiveMQ下载安装包 Active官网地址http://activemq.apache.org/activemq-5150-release.html 如图所示,有两个下载的链接,我们下 ...
随机推荐
- 兼容当前多浏览器的渐变颜色背景gradient的写法
经常有一些时候需要使用渐变背景,使用长条图片有点太不高大上了,于是自己写了个小例子,兼容多浏览器就要为每一个浏览器写对应的CSS,太低版本的浏览器只能使用图片做背景. 下面是当前五大浏览器对gradi ...
- arcgis api for js共享干货系列之一自写算法实现地图量算工具
众所周知,使用arcgis api for js实现地图的量算工具功能,无非是调用arcgisserver的Geometry服务(http://localhost:6080/arcgis/rest/s ...
- Spark中Lambda表达式的变量作用域
通常,我们希望能够在lambda表达式的闭合方法或类中访问其他的变量,例如: package java8test; public class T1 { public static void main( ...
- 检索Google Maps地图位置(小训练)
名称:检索地图位置 内容:地图初期显示和检索显示 功能:根据条件检索地图的经度与纬度 1.在这之前我们需要创建一个表(Accoun__c),添加一个重要的字段地理位置情報,它会默认的给你两个字段经度和 ...
- android环境下的即时通讯
首先了解一下即时通信的概念.通过消息通道 传输消息对象,一个账号发往另外一账号,只要账号在线,可以即时获取到消息,这就是最简单的即使通讯.消息通道可由TCP/IP UDP实现.通俗讲就是把一个人要发送 ...
- GCD的相关函数使用
GCD 是iOS多线程实现方案之一,非常常用 英文翻译过来就是伟大的中枢调度器,也有人戏称为是牛逼的中枢调度器 是苹果公司为多核的并行运算提出的解决方案 1.一次性函数 dispatch_once 顾 ...
- C# List 排序各种用法与比较
下面介绍各种List的sort的用法与比较 首先,我们建一个People的实体,有name.age.sex的属性,我们要排序的字段是年龄age 新建一个实体类 public class People ...
- Java 异常处理
异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的. 比如说,你的代码少了一个分号,那么运行出来结果是提示是错误java.lang.Error:如果你用System.out ...
- mongodb 性能篇
一. 索引及其优化 索引的概述 数据库的索引好比是一本书前面的目录,能加快数据查询的速度. 适当的地方增加索引,不合理的地方删除次优索引,能优化性能较差的应用. 索引的操作 基础索引:db.ken. ...
- CANopen学习——协议栈
协议,是双方都提前商量好的通讯约定. 例如:发送1代表灯亮,发送0代表灯灭. 但由于只是单bit的0和1在通信时,抗干扰太弱,且多种控制时不能区分,此时扩展一下协议. 例如: 头 地址 ...