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 如图所示,有两个下载的链接,我们下 ...
随机推荐
- hideSoftInputFromWindow
有的时候会碰到软键盘不好关闭,然后就去调界面代码,发现不行,说到底还是对软键盘不熟悉的原因,软键盘windowSoftInputMode有很多种 如果你默认的activity的模式为默认的,或者sta ...
- Android数据库相关整理
今天对Android中数据库相关的操作和代码做了一个整理,便于自己之后的查阅.主要内容有: 1.原生数据库写法 2.终端进sqlite的操作 3.第三方库 4.事务处理 5.权限和路径 一.原生数据库 ...
- 多War项目中静态文件的共享方案
[原创申明:文章为原创,欢迎非盈利性转载,但转载必须注明来源] 在互联网产品中,一般会有多个项目(Jar.WAR)组成一个产品线.这些WAR项目,因为使用相同的前端架构(jQuery.easyui等) ...
- T-SQL 去除特定字段的前导0
在工作过程中遇到一个需求,要从特定字段中删除前导零,这是一个简单的VARCHAR(10)字段. 例如,如果字段包含"00001A",则SELECT语句需要将数据返回为"1 ...
- linux基本知识
1.默认不写端口号就是80端口 127.0.0.1.localhost都代表本机 2.linux下的用户管理: id:可以查看当前用户whoami:查看当前的用户who:看当前已经登录的用户w:也 ...
- Newtonsoft.Json, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b9a188c8922137c6
未能加载文件或程序集“Newtonsoft.Json, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b9a188c8922137c6”或它的某一个 ...
- Geeklink引领智慧新生活!
煤油灯成为古董,管道天然气进入厨房,电脑挤进生活,手机代替书信成为通讯的主要工具-这些变化无不提醒我们,时代在变迁,科技在发展.而最近朋友圈和电视又在播报智能家居的生活方式-智能家电能实现怎样的情景功 ...
- AC日记——二叉堆练习3 codevs 3110
3110 二叉堆练习3 时间限制: 3 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 题目描述 Description 给定N(N≤500,000)和N个整 ...
- 嵌入式Linux驱动学习之路(二十五)虚拟网卡驱动程序
一.协议栈层次对比 设备无关层到驱动层的体系结构 1).网络协议接口层向网络层协议提供提供统一的数据包收发接口,不论上层协议为ARP还是IP,都通过dev_queue_xmit()函数发送数据,并通过 ...
- redis 学习笔记(7)-cluster 客户端(jedis)代码示例
上节学习了cluster的搭建及redis-cli终端下如何操作,但是更常用的场景是在程序代码里对cluster读写,这需要redis-client对cluster模式的支持,目前spring-dat ...