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
创建,生命周期等同于Connection
Temporary 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 如图所示,有两个下载的链接,我们下 ...
随机推荐
- 初识Spring框架实现IOC和DI(依赖注入)
学习过Spring框架的人一定都会听过Spring的IoC(控制反转) .DI(依赖注入)这两个概念,对于初学Spring的人来说,总觉得IoC .DI这两个概念是模糊不清的,是很难理解的, IoC是 ...
- 使用AxisHelper帮助理解View and Data API中的坐标系统
大家使用View and Data API做三维模型开发,必然首先要理解View and Data API的坐标系统,即XYZ三个轴向分别是怎么定义的.Three.js里面提供了一个AxisHelpe ...
- 记处理线上记录垃圾日志 The view 'Error' or its master was not found
最近监控线上日志,网站是ASP.NET MVC 开发的,发现不少错误日志都记录同样的内容: The view 'Error' or its master was not found or no vie ...
- android Animation介绍
Animation介绍: 在Android SDK介绍了2种Animation模式: 1. Tween Animation:间动画,通过对场景里的对象不断做图像变换(平移.缩放.旋转)产生动画效果,即 ...
- gulp rev manifest 添加目录前缀
gulp-rev 生成的manifest默认为: "index.css": "index.css?v=04aff97a7b", 为避免同名文件覆盖版本号,对替换 ...
- Atitti.dw cc 2015 绿色版本安装总结
Atitti.dw cc 2015 绿色版本安装总结 1.1. 安装程序无法初始化.请下载adobe Support Advisor检测该问题.1 1.1.1. Adobe Application M ...
- Netty:数据处理流程
Netty作为异步的.事件驱动一个网络通信框架,使用它可以帮助我们快速开发高性能高可靠性的网络服务. 为了更好的使用Netty来解决开发中的问题,学习Netty是很有必要的. Netty现在主流有三个 ...
- Greenplum 源码安装教程 —— 以 CentOS 平台为例
Greenplum 源码安装教程 作者:Arthur_Qin 禾众 Greenplum 主体以及orca ( 新一代优化器 ) 的代码以可以从 Github 上下载.如果不打算查看代码,想下载编译好的 ...
- 基于easyUI实现组织结构树图形
一. 准备工作 1. 点击此下载相关文件 2. 进入 js 文件夹,解压缩 jquery-easyui-1.5.rar 到当前文件夹 二. 在浏览器中运行 organize.html 文件,即可看到效 ...
- [转]ubuntu linux下DNS重启后丢失
从网上得知 /etc/resolv.conf中的DNS配置是从/etc/resolvconf/resolv.conf.d/head中加载而来,所以每回改resolv.conf都会失效,在此文件里面已经 ...