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 如图所示,有两个下载的链接,我们下 ...
随机推荐
- 使用 jQuery Ajax 在页面滚动时从服务器加载数据
简介 文本将演示怎么在滚动滚动条时从服务器端下载数据.用AJAX技术从服务器端加载数据有助于改善任何web应用的性能表现,因为在打开页面时,只有一屏的数据从服务器端加载了,需要更多的数据时,可以随着用 ...
- sql case when...then...else...end 选择判断
达到的需求为: 吓数收回日期为空:当接单日期不等于空和当天减接单日期大于3天时,为1,否则为0:当接单日期为空.最大发织交期不等于空和当天减去最大发织交期大于3天时,为1,否则为0:当接单日期和发织交 ...
- JQ实现判断iPhone、Android设备
最近做了一版微信宣传页,通过JQ来判断设备,并进行下载 微信内置浏览器对下载链接进行了屏蔽,所以先进行判断,如果是微信内置浏览器,则跳转应用宝链接,如果不是,则判断是iPhone/Adroid/PC ...
- Javascript绝不要使用在文档加载之后使用 document.write(), 怎么理解?
在文档加载之后使用 document.write(),会覆盖该文档. 需满足两个条件: 1.在函数内部调用document.write(): 2.通过按钮响应调用函数: 举 ...
- 有了大量微信用户,就不需要App了吗?
小卢同学是我半年前在中关村车库咖啡认识的一个自由创业者,他从北航毕业后在一家IT上市公司只上了1年多的班就辞职创业了,他的创业项目属于国内度假旅游垂直细分领域:积累大量详细的旅游攻略,组成一个个温馨舒 ...
- 我的屌丝giser成长记-研二篇
之前有提到过的,本来按照计划中,研一结束就该去深圳中科院研究所实习的,之前跟里面师兄说好了的,奈何导师又接到一个新的科研研究项目,跟学院的几个其他老师一起合作的,主要是关于土地流转系统,而且是一个挺大 ...
- 软件海贼团 OnePiece (版权所有)
最近迷上了“海贼王”这部动画片,不仅仅是因为其中的人物个个性格鲜明,剧情跌宕起伏扣人心弦,各种耍宝搞笑,还感觉到这个团队很像理想中的敏捷软件团队. 作为一直带团队的我,感觉“海贼王”这个动画片给了我很 ...
- Hibernate 系列 03 - 使用Hibernate完成持久化操作
引导目录: Hibernate 系列教程 目录 康姆昂,北鼻,来此狗.动次打次,Hibernate继续走起. 目录: 使用Hibernate实现按主键查询 使用Hibernate实现数据库的增.删.改 ...
- 遇到的Exception/error及解决办法记录汇总
一.java.net.SocketException 1.java.net.SocketException:Connection reset 首先,如果一端的Socket被关闭(或主动关闭,或因为异常 ...
- Java 数组
数组对于每一门编程语言来说都是重要的数据结构之一,当然不同语言对数组的实现及处理也不尽相同. Java语言中提供的数组是用来存储固定大小的同类型元素. 你可以声明一个数组变量,如numbers[100 ...