ACTIVEMQ学习笔记
ACTIVEMQ大总结

ACTIVEMQ大总结1. 背景当前,CORBA、DCOM、RMI等RPC中间件技术已广泛应用于各个领域。
但是面对规模和复杂度都越来越高的分布式系统,这些技术也显示出其局限性:(1)同步通信:客户发出调用后,必须等待服务对象完成处理并返回结果后才能继续执行;(2)客户和服务对象的生命周期紧密耦合:客户进程和服务对象进程都必须正常运行;如果由于服务对象崩溃或者网络故障导致客户的请求不可达,客户会接收到异常;(3)点对点通信:客户的一次调用只发送给某个单独的目标对象。
面向消息的中间件(Message Oriented Middleware,MOM)较好的解决了以上问题。
发送者将消息发送给消息服务器,消息服务器将消息存放在若干队列中,在合适的时候再将消息转发给接收者。
这种模式下,发送和接收是异步的,发送者无需等待;二者的生命周期未必相同:发送消息的时候接收者不一定运行,接收消息的时候发送者也不一定运行;一对多通信:对于一个消息可以有多个接收者。
已有的MOM系统包括IBM的MQSeries、Microsoft的MSMQ和BEA的MessageQ 等。
由于没有一个通用的标准,这些系统很难实现互操作和无缝连接。
Java Message Service(JMS)是SUN提出的旨在统一各种MOM系统接口的规范,它包含点对点(Point to Point,PTP)和发布/订阅(Publish/Subscribe,pub/sub)两种消息模型,提供可靠消息传输、事务和消息过滤等机制。
2.JMS概述2.1 JMS规范JAVA 消息服务(JMS)定义了Java 中访问消息中间件的接口。
JMS 只是接口,并没有给予实现,实现JMS 接口的消息中间件称为JMS Provider,例如ActiveMQ。
2.2 术语JMS Provider:实现JMS 接口的消息中间件;PTP:Point to Point,即点对点的消息模型;Pub/Sub:Publish/Subscribe,即发布/订阅的消息模型;Queue:队列目标;Topic:主题目标;ConnectionFactory:连接工厂,JMS 用它创建连接;Connection:JMS 客户端到JMS Provider 的连接;Destination:消息的目的地;Session:会话,一个发送或接收消息的线程;MessageProducer:由Session 对象创建的用来发送消息的对象;MessageConsumer:由Session 对象创建的用来接收消息的对象; Acknowledge:签收;Transaction:事务。
activemq技术总结

ActiveMQ介绍1.1什么是ActiveMQActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线。
ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的JMS Provider实现,尽管JMS规范出台已经是很久的事情了,但是JMS在当今的J2EE应用中间仍然扮演着特殊的地位。
主要特点:1. 多种语言和协议编写客户端。
语言: Java, C, C++, C#, Ruby, Perl, Python, PHP。
应用协议: OpenWire,Stomp REST,WS Notification,XMPP,AMQP2. 完全支持JMS1.1和J2EE 1.4规范(持久化,XA消息,事务)3. 对Spring的支持,ActiveMQ可以很容易内嵌到使用Spring的系统里面去,而且也支持Spring2.0的特性4. 通过了常见J2EE服务器(如Geronimo,JBoss 4, GlassFish,WebLogic)的测试,其中通过JCA 1.5 resource adaptors的配置,可以让ActiveMQ可以自动的部署到任何兼容J2EE 1.4 商业服务器上5. 支持多种传送协议:in-VM,TCP,SSL,NIO,UDP,JGroups,JXTA6. 支持通过JDBC和journal提供高速的消息持久化7. 从设计上保证了高性能的集群,客户端-服务器,点对点8. 支持Ajax9. 支持与Axis的整合10. 可以很容易得调用内嵌JMS provider,进行测试1.2JMS介绍JMS的全称是Java Message Service,即Java消息服务。
用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。
它主要用于在生产者和消费者之间进行消息传递,生产者负责产生消息,而消费者负责接收消息。
把它应用到实际的业务需求中的话我们可以在特定的时候利用生产者生成一消息,并进行发送,对应的消费者在接收到对应的消息后去完成对应的业务逻辑。
ActiveMQ实践入门指南

ActiveMQ实践入门指南ActiveMQ实践入门指南ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线。
ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provider实现,尽管JMS规范出台已经是很久的事情了,但是JMS在当今的J2EE应用中间仍然扮演着特殊的地位。
下面我们将分四部分来介绍ActiveMQ的相关内容。
ActiveMQ实践:松耦合和ActiveMQ回到2003年,一群开源开发者聚在一起组成了Apache Geronimo。
他们发现没有一个很好的使用BSD风格许可证的消息中间件可用。
因为Geronimo需要一个JMS实现J2EE兼容性,所以一些开发者开始探讨这种可能性。
ActiveMQ实践:松耦合和ActiveMQActiveMQ实践:特性列表和安装这一部分,我们将介绍ActiveMQ的特性列表和如何进行安装和如何对其进行测试。
ActiveMQ实践:特性列表和安装ActiveMQ实践:使用场景在系统架构中,有很多场景ActiveMQ和异步消息都会产生深远的影响。
这部分中,我们将介绍一些使用ActiveMQ的场景实例。
ActiveMQ实践:使用场景ActiveMQ实践:ActiveMQ使用入门开始使用ActiveMQ并不是很难,你只需要启动代理,确保它能够接受连接和发送消息。
这部分中,我们将介绍如何开始使用ActiveMQ。
ActiveMQ实践:ActiveMQ使用入门ActiveMQ实践:松耦合和ActiveMQ回到2003年,一群开源开发者聚在一起组成了Apache Geronimo。
在这种情况下,他们发现没有一个很好的使用BSD风格许可证的消息中间件可用。
因为Geronimo需要一个JMS实现J2EE兼容性,所以一些开发者开始探讨这种可能性。
他们拥有大量的商业MOM经验,而且他们甚至之前已经创建了一些MOM,这些开发者打算创建下一代伟大的开源消息中间件。
ActiveMQ基本介绍

ActiveMQ基本介绍预览说明:预览图片所展示的格式为文档的源格式展示,下载源文件没有水印,内容可编辑和复制ActiveMQ基本介绍1、ActiveMQ服务器工作模型通过ActiveMQ消息服务交换消息。
消息生产者将消息发送至消息服务,消息消费者则从消息服务接收这些消息。
这些消息传送操作是使用一组实现 ActiveMQ应用编程接口 (API) 的对象来执行的。
ActiveMQ客户端使用 ConnectionFactory 对象创建一个连接,向消息服务发送消息以及从消息服务接收消息均是通过此连接来进行。
Connection 是客户端与消息服务的活动连接。
创建连接时,将分配通信资源以及验证客户端。
这是一个相当重要的对象,大多数客户端均使用一个连接来进行所有的消息传送。
连接用于创建会话。
Session 是一个用于生成和使用消息的单线程上下文。
它用于创建发送的生产者和接收消息的消费者,并为所发送的消息定义发送顺序。
会话通过大量确认选项或通过事务来支持可靠传送。
客户端使用MessageProducer 向指定的物理目标(在API 中表示为目标身份对象)发送消息。
生产者可指定一个默认传送模式(持久性消息与非持久性消息)、优先级和有效期值,以控制生产者向物理目标发送的所有消息。
同样,客户端使用MessageConsumer 对象从指定的物理目标(在API 中表示为目标对象)接收消息。
消费者可使用消息选择器,借助它,消息服务可以只向消费者发送与选择标准匹配的那些消息。
消费者可以支持同步或异步消息接收。
异步使用可通过向消费者注册MessageListener 来实现。
当会话线程调用 MessageListener 对象的onMessage 方法时,客户端将使用消息。
2、ActiveMQ消息传送模型ActiveMQ 支持两种截然不同的消息传送模型:PTP(即点对点模型)和Pub/Sub(即发布/订阅模型),分别称作:PTP Domain 和Pub/Sub Domain。
ActiveMQ学习-主从备份及安全配置

安装要求:1. 部署需要jdk1.5及以上,编译需要jdk1.5(java5)及以上, Java的环境变量(JAVA_HOME)必须设置,即jdk安装的目录,比如c:\Program Files\jsdk.1.62. 下载ActiveMQ,推荐5.0版本以上,这类版本带管理界面,可以看到队列、连接主机、发送消息等。
a.下载ActiveMQ 5.6.0 Release/download.html放到d盘 ,解压,如图:运行bin文件夹下的activemq.bat,出现如下图所示:3. 验证是否运行成功:ActiveMQ5.6的版本默认启动时,启动了内置的jetty服务器,提供一个demo应用和用于监控ActiveMQ的admin应用:Admin:http://localhost:8161/admin/Demo:http://localhost:8161/demo/Demao界面:Admin应用界面:在浏览器中输入:http://localhost:8161/admin/,出现如下图所示表示成功:其中在导航菜单中,Queues是队列方式消息。
(在Queue Name 中输入要创建的队列名称,点击Create)使用该队列发送信息:发送信息后的队列信息为:点击队列名称test,进入如下界面:点击MessageID对应的内容,可以查看信息的详细信息:queue与topic的技术特点对比Subscribers消息订阅监控查询。
Connections可以查看链接数,分别可以查看xmpp、ssl、stomp、openwire、ws和网络链接。
Network是网络链接数监控。
Send可以发送消息数据。
4. 此时,ActiveMQ已经安装完成了,接下来配置登录监视控制台的用户名和密码。
打开conf文件夹下的jetty.xml,找到把authenticate属性的值改成true即可,重启activemq.bat,再登录监视控制台,就需要输入密码了,默认的用户名和密码是admin/admin。
ActiveMQ入门

ActiveMQ入门作者:一路向北摘要:本文主要讲述ActiveMQ的基本知识和使用方法,并简单结合spr ing使用ActiveMQ。
一、ActiveMQ特性和使用总览企业消息软件从80年代起就存在,它不只是一种应用间消息传递风格,也是一种集成风格。
因此,消息传递可以满足应用间的通知和互相操作。
但是开源的解决方案是到最近10年才出现的。
Apache ActiveMQ就是其中一种。
它使应用间能以异步,松耦合方式交流。
本章将向您介绍ActiveMQ。
1、ActiveMQ的特性ActiveMQ是Apache软件基金下的一个开源软件,它遵循JMS1.1规范(Java Message Service),是消息驱动中间件软件(MOM)。
它为企业消息传递提供高可用,出色性能,可扩展,稳定和安全保障。
ActiveMQ使用Apac he许可协议。
因此,任何人都可以使用和修改它而不必反馈任何改变。
这对于商业上将ActiveMQ用在重要用途的人尤为关键。
MOM的工作是在分布式的各应用之间调度事件和消息,使之到达指定的接收者。
所以高可用,高性能,高可扩展性尤为关键。
ActiveMQ的目标是在尽可能多的平台和语言上提供一个标准的,消息驱动的应用集成。
ActiveMQ实现JMS规范并在此之上提供大量额外的特性。
下面是一个高层次的特性列表。
欢迎访问本人百度空间:/snowslince浣花草堂·遵循JMS规范----理解ActiveMQ的起始点是明白ActiveMQ的各种特性是JMS1.1规范的实现。
本章后面将讨论JMS规范提供的好处和保证。
它们包括同步和异步消息传递,一次和只有一次的消息传递,对于预订者的持久消息等等。
依附于JMS规范意味着,不论JMS消息提供者是谁,同样的基本特性都是有效的。
·连接----ActiveMQ提供各种连接选择,包括HTTP,HTTPS,IP多点传送,SSL,STOMP,TCP,UDP,XMPP等。
ActiveMQ培训教程

一、ActiveMQ介绍 二、ActiveMQ安装配置 三、ActiveMQ架构 四、ActiveMQ消息模式 四、 消息模式 五、Java for ActiveMQ
入门实例
实例说明:
ActiveMQ发送和异步接受文本类型消息的简单功能 , 采用PTP模式
MQBroker
类com.honno.activemq.MQBroker负责启动ActiveMQ的消息代理。 代码片段: BrokerService broker = new BrokerService(); try { broker.addConnector("tcp://localhost:61616"); broker.start(); } catch (InterruptedException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); }
谢谢
1. 多种语言和协议编写客户端。语言: Java, C, C++, C#, Ruby, Perl, Python, P HP。应用协议: OpenWire,Stomp REST,WS Notification,XMPP,AMQP 。 2. 完全支持JMS1.1和J2EE 1.4规范 (持久化,XA消息,事务) 3. 对Spring的支持,ActiveMQ可以很容易内嵌到使用Spring的系统里面去,而 且也支持Spring2.0的特性 4. 通过了常见J2EE服务器(如 Geronimo,JBoss 4, GlassFish,WebLogic)的测试, 其中通过JCA 1.5 resource adaptors的配置,可以让ActiveMQ可以自动的部署 到任何兼容J2EE 1.4 商业服务器上 5. 支持多种传送协议:in-VM,TCP,SSL,NIO,UDP,JGroups,JXTA 6. 支持通过JDBC和journal提供高速的消息持久化 7. 从设计上保证了高性能的集群,客户端-服务器,点对点 8. 支持Ajax 9. 支持与Axis的整合 10. 可以很容易得调用内嵌JMS provider,进行测试
消息队列——ActiveMQ使用及原理浅析

消息队列——ActiveMQ使⽤及原理浅析⽂章⽬录引⾔什么是消息中间件?随着业务的急速增长以及分布式架构的逐渐兴起,⾸先要考虑的就是如何⾼效的在各节点之间传递消息,其次要考虑的是流量洪峰时如何削减系统的压⼒以及跨平台消息的传输等问题,消息中间件就可以帮我们解决以上问题。
⽽消息队列产品众多,我们该如何选择呢?本系列⽂章主要针对⽬前使⽤最多的ActiveMQ、Kafka、RabbitMQ进⾏讲解说明。
正⽂⼀、ActiveMQ是如何产⽣的?产⽣背景⼀开始消息中间件的⼚商繁多,且各个⼚商之间没有统⼀的规范,这就导致了各消息中间件⾮常难以整合协作,因此,后来陆续出现了如JMS和AMQP 这样的消息队列规范,提供了统⼀的标准,⽽ActiveMQ就是完全遵循JMS规范开发的消息队列。
JMS规范基本概念什么是JMS(Java Message Service)规范?JMS是⼀个基于Java平台⾯向消息中间件(MOM)的API,⽤于在两个应⽤程序之间,或分布式系统中发送消息,进⾏异步通信。
在设计JMS时,设计师就计划能够结合现有消息队列的优点,如:不同的消息传送模式或域,例如点对点消息传送和发布/订阅消息传送⽀持同步和异步消息⽀持可靠性消息的传输⽀持常见的消息格式,如:⽂本、字节、流、对象等JMS体系结构上⾯是从百度找的⼀个图⽚,下⾯对其中各个对象分别进⾏说明:ConnectionFactory:连接⼯⼚,⼀般设为单例模式,⼀旦创建,就⼀直运⾏在应⽤容器内,客户端使⽤连接⼯⼚创建⼀个JMS连接。
Connection:JMS连接表⽰JMS客户端和服务器端之间的⼀个活动的连接。
Session:JMS会话表⽰JMS客户与JMS服务器之间的会话状态。
JMS会话建⽴在JMS连接上,表⽰客户与服务器之间的⼀个会话线程。
Destination:消息管道,从⽣产端流向客户端,包括队列(PTP),主题(Pub/Sub)。
Message Producer和Message Consumer:⽣产者和消费者对象由Session对象创建,⽤于发送和接收消息。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一.ACTIVEMQ是什么ActiveMQ是Apache出品,最流行的,能力强劲的开源消息中间件,应用中引入中间件的好处是减少服务器之间的依赖关系,提高扩展性,在没有引入消息中间件的情况可能出现如下:
出现服务器多依赖的情况,不方面扩展,而引入消息中间件后如从图中可以看出引入消息中间件后,每个服务器只依赖于消息中间件,而且在应用中这种依赖关系式一种弱依赖关系
ActiveMQ特性列表1.多种语言和协议编写客户端。语言:Java,C,C++,C#,Ruby,Perl,Python,PHP2.完全支持JMS1.1和J2EE1.4规范(持久化,XA消息,事务)3.对Spring的支持,ActiveMQ可以很容易内嵌到使用Spring的系统里面去,而且也支持Spring2.0的特性4.支持通过JDBC和journal提供高速的消息持久化5.从设计上保证了高性能的集群,客户端-服务器,点对点
1.为什么异步调用是高效的?Systemsthatrelyuponsynchronousrequeststypicallyhavealimitedabilitytoscalebecauseeventuallyrequestswillbegintobackup,therebyslowingthewholesystem.《ActiveMQinAction》一书在解释同步调用的系统为什么会存在性能问题,或者反过来说为什么异步调用的系统性能要好的时候是这样解释的:同步调用总会有可能出现请求因为没有及时响应而导致阻塞的情况发生!2.JMS的消息格式
和所有其他的通信规范一样,JMS也会定义消息的格式,如同http的request和response格式一样,jms的消息也分成header和body两部分:header部分主要是由预定义属性和一些自定义属性组成,一些重要的预定义属性有:JMSDestination:消息的目的地
JMSDeliveryMode:消息的投递模式,有两种Persistent和NonpersistentJMSExpiration:消息的期限
JMSMessageID:消息的IDJMSPriority:消息的优先级
....body部分,JMS定义了六种java类型,它们是:
1Message—Thebasemessagetype.Usedtosendamessagewithnopayload,onlyheadersandproperties.Typicallyusedforsimpleeventnotification.2TextMessage—AmessagewhosepayloadisaString.CommonlyusedtosendsimpletextualandXMLdata.3MapMessage—Usesasetofname/valuepairsasitspayload.ThenamesareoftypeStringandthevaluesareaJavaprimitivetype.4BytesMessage—Usedtocontainanarrayofuninterpretedbytesasthepayload.5StreamMessage—AmessagewithapayloadcontainingastreamofprimitiveJavatypesthat’sfilledandreadsequentially.6ObjectMessage—UsedtoholdaserializableJavaobjectasitspayload.UsuallyusedforcomplexJavaobjects.AlsosupportsJavacollections.
3.消息的发布机制所有MOM现在都支持两种消息发布机制:point-to-point和publish-subscribe。点对点通信机制如下图:
订阅发布通信机制如下图:补充:关于Request/Response风格的消息通信.
AlthoughtheJMSspecdoesn’tdefinerequest/replymessagingasaformalmessagingdomain,itdoesprovidesomemessageheadersandacoupleofconvenienceclassesforhandlingbasicrequest/replymessaging.JMS没有定义这种风格的通信机制,但是通过一些消息header的属性和工具类是很容易实现这种通信模型的。这里所需要的header主要是JMSReplyTo和JMSCorrelationID两个属性.TheJMSReplyTospecifiesthedestinationwhereareplyshouldbesent,andtheJMSCorrelationIDinthereplymessagespecifiestheJMSMessageIDoftherequestmessage.Theseheadersareusedtolinkthereplymessage(s)totheoriginalrequestmessage.JMSReplyTo指明了响应应该送交的地址,很显然这是请求消息要提供的。JMSCorrelationID则用来指明这则消息是回复给那个请求的,因此它应该是响应消息里要提供的。Theconvenienceclassesforhandlingbasicrequest/replyaretheQueueRequestorandtheTopicRequestor.Theseclassesprovidearequest()methodthatsendsarequestmessageandwaitsforareplymessagethroughthecreationofatemporarydestinationwhereonlyonereplyperrequestisexpected.而工具类,则是指QueueRequestor和TopicRequestor的request方法,这个方法会发送一个请求消息,然后等待一个响应消息。
二.安装与启动ActiveMQ安装1.在http://activemq.apache.org/download.html下载5.4.0发行包,解压到需要安装ActiveMQ的文件夹,记为/path/to/activemq。2.unix环境activemq文件夹需要执行权限,执行如下命令chmod-R755/path/to/activemq
启动1.window环境运行/path/to/activemq/bin/activemq.bat2.unix环境运行/path/to/activemq/bin/activemq
测试ActiveMQ默认使用的TCP连接端口是61616,通过查看该端口的信息可以测试ActiveMQ是否成功启动
1.window环境运行netstat-an|find"61616"2.unix环境运行netstat-an|grep61616
监控ActiveMQ5.0版本默认启动时,启动了内置的jetty服务器,提供一个demo应用和用于监控ActiveMQ的admin应用。
admin:http://127.0.0.1:8161/admin/demo:http://127.0.0.1:8161/demo/三.如何使用ActiveMQ项目中需要把activemq-all-5.3.0.jar加入classpathActiveMQ的编码模板:发送端:publicclassQueueSender{publicstaticvoidmain(String[]args)throwsJMSException{
//通过username,password,url创建连接工厂接口ConnectionFactoryfactory=newActiveMQConnectionFactory(ActiveMQConnection.DEFAULT_USER,ActiveMQConnection.DEFAULT_PASSWORD,"tcp://localhost:61616");//通过连接工厂创建一个新的连接接口Connectionconnection=factory.createConnection();//通过连接接口创建一个会话接口Sessionsession=connection.createSession(false,Session.AUTO_ACKNOWLEDGE);//会话接口创建有关主题的目标接口Destinationdestination=session.createQueue("test_queue");//会话接口再根据目标接口来创建一个消息生产者接口MessageProducerproducer=session.createProducer(destination);//调用会话生成一个文本消息Messagemessage=session.createTextMessage("HelloWorld!");//通过生产者接口Send将消息发布到ActiveMQ服务器producer.send(message);//关闭会话session.close();//关闭连接connection.close();}}
消费端:publicclassQueueReceiver{publicstaticvoidmain(String[]args)throwsJMSException{
//通过username,password,url创建连接工厂接口ConnectionFactoryfactory=newActiveMQConnectionFactory(ActiveMQConnection.DEFAULT_USER,ActiveMQConnection.DEFAULT_PASSWORD,"tcp://localhost:61616");//通过连接工厂创建一个新的连接接口Connectionconnection=factory.createConnection();connection.start();//通过连接接口创建一个会话接口Sessionsession=connection.createSession(false,Session.AUTO_ACKNOWLEDGE);//会话接口创建有关主题的目标接口Destinationdestination=session.createQueue("test_queue");