ActiveMQ消息队列
来源:互联网 发布:数据报送的重要性 编辑:程序博客网 时间:2024/06/09 16:39
ActiveMQ介绍
ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线。
ActiveMQ安装
ActiveMQ要求JDK1.5以上,推荐1.6以上版本。
安装完JDK后,从 http://activemq.apache.org/download.html下载MQ的最新版本。解压后,可以看到MQ目录下有以下文件和目录。
ActiveMQ目录结构
目录结构介绍如下:
bin,放置启动、停止、注册服务等命令文件。
conf,配置文件,包括broker、jetty、log等配置文件。
data,放置消息缓存(kahadb)、jetty中jsp编译后的class、AMQ日志等文件。
docs,帮助文档
examples,应用示例
lib,依赖的jar包
webapps,AMQ下的web应用,包括web console和 file server。
webapps-demo,demo应用,默认不能访问,如需访问需要在conf/jetty.xml文件中配置。
activemq-all-5.10.1.jar, AMQ的开发用的jar包
其它文件,包括license、notice和readme
JMS介绍
JMS(Java Message Service) 即Java消息服务。它提供标准的产生、发送、接收消息的接口简化企业应用的开发。它支持两种消息通信模型:点到点(point-to-point)(P2P)模型和发布/订阅(Pub/Sub)模型。P2P模型规定了一个消息只能有一个接收者;Pub/Sub模型允许一个消息可以有多个接收者。
对于点到点模型,消息生产者产生一个消息后,把这个消息发送到一个Queue(队列)中,然后消息接收者再从这个Queue中读取,一旦这个消息被一个接收者读取之后,它就在这个Queue中消失了,所以一个消息只能被一个接收者消费。
与点到点模型不同,发布/订阅模型中,消息生产者产生一个消息后,把这个消息发送到一个Topic中,这个Topic可以同时有多个接收者在监听,当一个消息到达这个Topic之后,所有消息接收者都会收到这个消息。
ActiveMQ优势
·多种语言和协议编写客户端。语言: Java, C, C++, C#, Ruby, Perl, Python, PHP。应用协议: OpenWire,Stomp REST,WS Notification,XMPP,AMQP
·完全支持JMS1.1和J2EE 1.4规范(持久化,XA消息,事务)
·对Spring的支持,ActiveMQ可以很容易内嵌到使用Spring的系统里面去,而且也支持Spring2.0的特性
·完全支持JMS1.1和J2EE 1.4规范(持久化,XA消息,事务)
·通过了常见J2EE服务器(如Geronimo,JBoss 4, GlassFish,WebLogic)的测试,其中通过JCA 1.5 resource adaptors的配置,可以让ActiveMQ可以自动的部署到任何兼容J2EE 1.4 商业服务器上
·支持多种传送协议:in-VM,TCP,SSL,NIO,UDP,JGroups,JXTA
·从设计上保证了高性能的集群,客户端-服务器,点对点
·支持Ajax
·支持与Axis的整合
·可以很容易得调用内嵌JMS provider,进行测试
场景适用
适合场景:消息中间件一般被用在异步消息通信、整合多个系统的场景。
不适合场景:如果系统生态环境很单一,无需跟其他第三方进行通信,或是虽然要简单的通信但是数据量不大,业务不太复杂,其实个人认为是无需用MQ这种重量级的解决方案的,直接暴露接口就好了。
ActiveMQ后台
浏览器打开http://192.168.202.128:8161/admin
输入用户名、密码,登录到后台界面。
点对点通信模式
一个生产者向一个特定的队列发布消息,一个消费者从该队列中读取消息。这里,生产者知道消费者的队列,并直接将消息发送到消费者的队列。这种模式被概括为:
只有一个消费者将获得消息
生产者不需要在接收者消费该消息期间处于运行状态,接收者也同样不需要在消息发送时处于运行状态。
每一个成功处理的消息都由接收者签收
生产者生产消息
消费者消费消息
在点对点通信模式中,消息只要没有被消费,一直是挂起的状态,直到被消费者消费。
而在发布/订阅(Pub/Sub)模型中,如果消费者没有订阅主题或没有启动服务,则获得不到消息。
发布/订阅模型
支持向一个特定的消息主题发布消息。多个订阅者可能对接收来自特定消息主题的消息感兴趣。在这种模型下,发布者和订阅者彼此不知道对方。这种模式好比是匿名公告板。这种模式被概括为:
多个消费者可以获得消息
在发布者和订阅者之间存在时间依赖性。发布者需要建立一个订阅(subscription),以便客户能够购订阅。订阅者必须保持持续的活动状态以接收消息,除非订阅者建立了持久的订阅。在那种情况下,在订阅者未连接时发布的消息将在订阅者重新连接时重新发布。
Java代码实现
编程的结构
消息产生者向JMS发送消息的步骤
(1)创建连接使用的工厂类JMS ConnectionFactory
(2)使用管理对象JMS ConnectionFactory建立连接Connection
(3)使用连接Connection建立会话Session
(4)使用会话Session和管理对象Destination创建消息生产者MessageSender
(5)使用消息生产者MessageSender发送消息
消息消费者从JMS接受消息的步骤
(1)创建连接使用的工厂类JMS ConnectionFactory
(2)使用管理对象JMS ConnectionFactory建立连接Connection
(3)使用连接Connection建立会话Session
(4)使用会话Session和管理对象Destination创建消息消费者MessageReceiver
(5)使用消息消费者MessageReceiver接受消息,需要用setMessageListener将MessageListener接口绑定到MessageReceiver
消息消费者必须实现了MessageListener接口,需要定义onMessage事件方法。
- ActiveMQ实现消息队列
- ActiveMQ 消息队列
- 队列消息ActiveMq
- 深入浅出 消息队列 ActiveMQ
- 消息队列中间件ActiveMQ
- 深入浅出 消息队列 ActiveMQ
- 深入浅出 消息队列 ActiveMQ
- 深入浅出 消息队列 ActiveMQ .
- 消息队列ActiveMQ
- 深入浅出 消息队列 ActiveMQ
- 深入浅出 消息队列 ActiveMQ
- 深入浅出 消息队列 ActiveMQ
- 深入浅出 消息队列 ActiveMQ
- 深入浅出 消息队列 ActiveMQ
- 深入浅出 消息队列 ActiveMQ
- 消息队列------ActiveMQ
- 消息队列 ActiveMQ
- 消息队列 ActiveMQ
- 8大排序算法
- main方法可以被设定为private么?
- shiro基础配置说明
- bzoj 4144 [AMPPZ2014]Petrol 最短路+最小生成树+倍增
- Linux下的lds链接脚本基础
- ActiveMQ消息队列
- linux命令学习-文件目录之nl命令
- 【机器学习基础】随机森林算法
- linux命令学习-文件目录之more命令
- 如何通过抓包抓出rtmp的完整留地址
- javaScript实现倒计时
- SVN版本管理系统的安装 CentOS + Subversion + Apache + Jsvnadmin
- 11-05
- MD5 API函数