ActiveMQ in Action_中文
activemq面试题
activemq面试题ActiveMQ是一种开源的消息中间件,常用于解决系统之间的异步通信,提供高可靠性、高性能的消息传递服务。
在面试中,考官可能会询问与ActiveMQ相关的知识点,下面是一些常见的面试题及其答案。
1. 什么是ActiveMQ?ActiveMQ是一个基于Java的开源消息中间件,它实现了Java Message Service (JMS)的规范,并提供了高性能、高可靠性的消息传递服务。
它支持多种传输协议,包括TCP、UDP、HTTP等。
2. 请简要说明ActiveMQ的特点和优势。
ActiveMQ具有以下特点和优势:- 可靠性:提供消息持久化机制,确保消息在发送和接收过程中的可靠性。
- 高性能:使用异步发送和接收机制,在传输层面提高了性能。
- 可扩展性:支持多种消息传输协议和编程语言,能够轻松与不同的应用集成。
- 支持多种通信模型:支持点对点和发布/订阅两种常见的通信模型。
- 容错性:支持主备、集群等模式,提供了高可用性的消息传递服务。
3. 请说明点对点通信和发布/订阅通信模型的区别。
点对点通信模型中,消息的生产者将消息发送到一个队列中,消息的消费者从队列中接收消息。
每个消息只能被一个消费者接收,消息的传递是一对一的关系。
发布/订阅通信模型中,消息的生产者将消息发送到一个主题中,多个消费者可以订阅该主题并接收消息。
每个消息可以被多个消费者接收,消息的传递是一对多的关系。
4. ActiveMQ如何保证消息的可靠性?ActiveMQ通过持久化机制保证消息的可靠性。
当一个消息被发送到队列或主题时,ActiveMQ会将该消息保存到磁盘上。
即使在ActiveMQ服务崩溃或重启后,也能够保证消息不会丢失。
另外,ActiveMQ还提供了事务机制,可以将发送和接收操作绑定到一个事务中进行管理,以保证消息的完整性。
5. ActiveMQ的集群模式是如何实现的?ActiveMQ可以通过使用Networks of Brokers(简称NoB)来实现集群模式。
activemq用法
activemq用法ActiveMQ是一个消息中间件,它实现了Java Message Service (JMS)规范,通过提供高性能、可靠的消息传递机制,帮助开发人员构建分布式系统和异步应用程序。
以下是关于ActiveMQ的一些常见用法:1. 消息队列:ActiveMQ允许应用程序通过消息队列进行异步通信。
发送方将消息放入队列中,接收方可以从队列中获取消息进行处理。
这种方式可以实现解耦和异步处理,提高应用程序的可伸缩性和性能。
2. 发布/订阅模型:ActiveMQ还提供了发布/订阅模型,允许发布者将消息发布到主题(Topic),然后订阅者可以从主题中订阅消息进行处理。
这种模型适用于广播和通知场景,可以实现消息的多播。
3. 消息传递可靠性:ActiveMQ提供了多种机制来确保消息传递的可靠性。
包括持久化存储、消息重发机制、事务机制等。
持久化存储可以确保即使在应用程序关闭或崩溃后,消息也不会丢失。
消息重发机制可以确保消息在网络故障或其他错误情况下的可靠传递。
4. 消息过滤和选择:ActiveMQ允许消费者使用消息选择器来选择订阅的消息。
通过指定一些条件,可以筛选出需要处理的消息,减少消费者的工作量和网络传输的开销。
5. 点对点和异步处理:ActiveMQ支持点对点的消息传递方式,也支持异步消息处理。
可以将消息发送到指定的队列,然后异步地处理消息,提高应用程序的整体性能和吞吐量。
6. 集成Spring框架:ActiveMQ与Spring框架可以很好地集成,Spring提供了ActiveMQ的连接工厂(ConnectionFactory)和JmsTemplate等组件,简化了ActiveMQ的使用和配置。
7. 监控和管理:ActiveMQ提供了Web控制台和JMX接口,用于监控和管理ActiveMQ服务器。
可以查看连接数、队列状态、消息的发送和接收情况等,并可以进行动态配置和调整。
总之,ActiveMQ是一个功能强大的消息中间件,可以帮助开发人员实现可靠、高性能的消息传递。
(转)关于ActiveMQ的配置
(转)关于ActiveMQ的配置⽬前常⽤的消息队列组建⽆⾮就是MSMQ和ActiveMQ,⾄于他们的异同,这⾥不想做过多的⽐较。
简单来说,MSMQ内置于微软操作系统之中,在部署上包含⼀个隐性条件:Server需要是微软操作系统。
(对于这点我并去调研过MSMQ是否可以部署在⾮微软系统,⽐如:Linux,只是拍脑袋想了想,感觉上是不可以)。
对于ActiveMQ,微软系统和Linux都是可以部署的。
从功能⽅⾯来说,⼀般最常⽤的就是:消息的收/发,感觉差异不⼤。
从性能上来说,⼀般的说法是ActiveMQ略⾼。
在稳定性上,个⼈感觉MSMQ更好。
如果这两种常⽤队列都⽤过的同学,应该来说最⼤的差异在于:MSMQ如果要访问远程队列(⽐如机器A上的程序访问机器B上的队列),会⽐较恶⼼。
在数据量⽐较⼤的情况之下,⼀般来说队列服务器会专门的⼀台或者多台(多台的话,⽤程序去做热备+负载⽐较⽅便,也不需要额外的硬件成本。
简单来说做法可以这样:消息发送的时候随机向着多台队列服务器上发送消息;接受的时候开多个线程去分别监听;热备⽅⾯,可以维护⼀个带状态的队列连接池,如果消息收发失败那么将状态置为不可⽤,然后起⼀个线程去定时监测坏的连接是否可⽤,这个过程⼀般情况下可以不⽤加锁,为什么,⼤家根据各⾃需要去取舍吧)。
最近搞完了短彩信的⽹关连接服务,这两种队列我均使⽤了。
⼤致的过程是这样的:上层应⽤如果要发端彩信,那么将消息直接发送⾄ActiveMQ(⽬前⽤的就是上⾯说的多台热备+负载,因为实际中下⾏量⾮常⼤5千万条/天以上),然后端彩信⽹关连接服务部署多套,每套均依赖本机的MSMQ。
为什么呢?⽤ActiveMQ的原因是:上层应⽤程序和⽹关连接服务彼此独⽴,消息需要跨机访问。
⽤MSMQ的原因是:ActiveMQ中的数据是⼀条不分省的⼤队列,⽹关连接服务需要按省流控,所以端彩信⽹关连接服务:⾸先把消息从ActiveMQ取出来,然后存⾄本机上的分省MSMQ,这样做另外的⼀个好处就是:ActiveMQ不⾄于过多挤压,他的数据会分摊到N台短彩信⽹关连接服务所部署的机器上的MSMQ之中,也就说MSMQ可以起到分摊数据和缓冲的作⽤。
activemq主从切换原理
activemq主从切换原理
ActiveMQ是一个基于消息队列的分布式消息中间件,可以实现高性能、高可用的消息传输。
在ActiveMQ中,主从切换是一个关键的特性,可以确保在主服务器宕机时,从服务器可以接管消息传输的任务。
下面是ActiveMQ主从切换的原理:
1. 主服务器和从服务器都连接到同一个共享的存储(如数据库、文件系统),共享的存储中保存着消息队列中的数据。
2. 主服务器负责处理消息的生产和消费,并将消息写入共享的
存储中。
3. 从服务器监听主服务器发送的数据变化,并从共享的存储中
读取数据。
4. 当主服务器宕机时,从服务器会检测到这个状态,并会接管
成为新的主服务器。
5. 新的主服务器会接管消息的生产和消费,并继续将消息写入
共享的存储中。
6. 一旦原来的主服务器恢复正常,它会重新连接到共享的存储,并成为从服务器,接收并处理新的数据变化。
通过在主服务器和从服务器之间共享存储,ActiveMQ实现了主从切换的高可用性。
当主服务器宕机时,从服务器会接管消息传输任务,确保消息的可靠传递。
而当主服务器恢复正常时,它会重新连接到共
享的存储,并从中读取新的数据变化,实现了主从切换的无缝切换。
activemq消息机制原理
activemq消息机制原理
ActiveMQ消息机制的原理主要包括以下几点:
1. 消息的发送:ActiveMQ支持同步和异步两种发送模式。
同步发送过程中,发送者发送一条消息会阻塞直到broker反馈一个确认消息,表示消息已经
被broker处理。
这个机制提供了消息的安全性保障,但由于是阻塞的操作,会影响到客户端消息发送的性能。
异步发送的过程中,发送者不需要等待broker提供反馈,所以性能相对较高。
但是可能会出现消息丢失的情况。
2. 消息的接收:ActiveMQ服务端会根据消息对应的目标模型(p2p/topic)将消息发送给可以接受的消费者。
期间默认会将数据进行持久化,并等待消费者签收消息后才会将消息删除,避免消息丢失。
3. 消息的传递:ActiveMQ的作用就是实现跨网络的习性与系统剑通信,可以将业务解耦,提供异步消息支持,增加系统并发量。
比如原本执行一个操作需要1s,那么用户请求后必须等待1s之后才会得到响应,引入MQ之后,我们可以仅仅只做简单的校验流程,确认该操作可以执行时,将消耗的操作使用异步消息通知,并直接返回用户操作成功,而专门处理该业务的服务者监听该消息,一旦有消息之后就开始处理。
以上是ActiveMQ消息机制的原理,供您参考,如需更多信息,建议查阅关于ActiveMQ的专业书籍。
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集群的使用与配置
Clustering(集群)ActiveMQ从多种不同的方面提供了集群的支持。
1、Queue consumer clustersActiveMQ支持订阅同一个queue的consumers上的集群。
如果一个consumer 失效,那么所有未被确认(unacknowledged)的消息都会被发送到这个queue上其它的consumers。
如果某个consumer的处理速度比其它consumers更快,那么这个consumer就会消费更多的消息。
需要注意的是,笔者发现AcitveMQ5.0版本的Queue consumer clusters存在一个bug:采用AMQ Message Store,运行一个producer,两个consumer,并采用如下的配置文件:那么经过一段时间后可能会报出如下错误:ERROR[ActiveMQTransport:tcp:///127.0.0.1:1843-RecoveryListenerAdapter.java:58-RecoveryListenerAdapter] Message id ID:versus-1837-1203915536609-0:2:1:1:419 could not be recovered from the data store!Apache官方文档说,此bug已经被修正,预定在5.1.0版本上体现。
2、Broker clusters一个常见的场景是有多个JMS broker,有一个客户连接到其中一个broker。
如果这个broker失效,那么客户会自动重新连接到其它的broker。
在ActiveMQ 中使用failover:// 协议来实现这个功能。
ActiveMQ3.x版本的reliable://协议已经变更为failover://。
如果某个网络上有多个brokers而且客户使用静态发现(使用Static Transport 或Failover Transport)或动态发现(使用Discovery Transport),那么客户可以容易地在某个broker失效的情况下切换到其它的brokers。
activemq maxinactivityduration -回复
activemq maxinactivityduration -回复什么是ActiveMQ的maxInactivityDuration?ActiveMQ是一个流行的开源消息代理(Message Broker),它使用Java消息服务(Java Message Service,JMS)作为消息传递的标准接口。
ActiveMQ的maxInactivityDuration是其配置文件中的一个参数,用于设置与客户端连接保持活跃的最长时间。
在本文中,我们将详细讨论ActiveMQ的maxInactivityDuration参数的含义和用法。
ActiveMQ的maxInactivityDuration参数是指在没有任何传入或传出的消息流量时,保持客户端连接活跃的最长时间。
当客户端和ActiveMQ之间的连接空闲时间超过这个设定的时间时,ActiveMQ将关闭该连接,以确保系统资源的最佳利用。
接下来我们将一步一步回答关于ActiveMQ的maxInactivityDuration 的问题。
问题1:如何设置ActiveMQ的maxInactivityDuration参数?要设置ActiveMQ的maxInactivityDuration参数,我们需要编辑ActiveMQ的配置文件。
在ActiveMQ的主目录下,可以找到一个名为activemq.xml的配置文件。
打开这个文件,我们可以查找到broker元素。
在broker元素中,我们可以找到一个名为transportConnector的子元素,在该子元素中,我们可以找到一个名为transport的子元素。
在transport元素中,我们可以找到一个名为transportConnector的属性,在该属性中,我们可以找到一个名为wireFormat的子元素。
在wireFormat元素中,我们可以找到一个名为maxInactivityDuration 的属性,通过修改这个属性的值,我们可以设置ActiveMQ的maxInactivityDuration参数。
activemq面试题及答案
activemq面试题及答案ActiveMQ是一款广泛使用的开源消息中间件,常常用于构建高性能、可靠的分布式系统。
在面试过程中,你可能会遇到与ActiveMQ相关的问题。
本文将为您提供一些常见的ActiveMQ面试题及答案,帮助您更好地应对面试。
1. 什么是ActiveMQ?请简要介绍一下。
ActiveMQ是Apache软件基金会的一个开源消息中间件,它实现了Java Message Service(JMS)API,并支持多种消息协议。
ActiveMQ提供了高度扩展性和可靠性,可用于构建可靠的消息传递和事件驱动的应用程序。
2. ActiveMQ有哪些主要特性?- 完全支持JMS规范:ActiveMQ完全实现了JMS规范,提供了丰富的消息传递功能。
- 分布式通信:ActiveMQ支持分布式部署,可以在多个节点之间进行通信。
- 持久化支持:ActiveMQ提供了消息持久化的功能,确保消息在传递过程中不会丢失。
- 高可用性:ActiveMQ支持主从复制和集群模式,提供高可用性和负载均衡的能力。
- 事务支持:ActiveMQ允许将消息发送和接收操作与事务关联,确保消息的原子性。
- 消息过滤:ActiveMQ支持使用SQL标准语句进行消息过滤,满足不同场景下的需求。
3. ActiveMQ与其他消息中间件(如RabbitMQ、Kafka)相比有什么优势?ActiveMQ相较于其他消息中间件,具有以下优势:- 易于使用:ActiveMQ使用简单,支持JMS标准,提供了丰富的功能和易于理解的API。
- 社区活跃:ActiveMQ作为Apache项目,拥有庞大的开发者社区支持,可以获得及时的技术支持和更新。
- 成熟稳定:ActiveMQ经过多年的发展和使用,已经稳定且可靠,在各种场景下都有广泛应用。
- 可扩展性:ActiveMQ提供了可扩展的体系架构,可以根据需求进行横向和纵向扩展,满足高并发和大规模消息处理的需求。
ActiveMQ(中文)参考手册
1 JMS在介绍Act iveMQ之前,首先简要介绍一下JMS规范。
1.1 JMS的基本构件1.1.1 连接工厂连接工厂是客户用来创建连接的对象,例如Acti veMQ提供的Act iveMQ Conne ction Facto ry。
1.1.2 连接JMS Connec tion封装了客户与JMS提供者之间的一个虚拟的连接。
1.1.3 会话JMS Sessio n是生产和消费消息的一个单线程上下文。
会话用于创建消息生产者(produc er)、消息消费者(consum er)和消息(messag e)等。
会话提供了一个事务性的上下文,在这个上下文中,一组发送和接收被组合到了一个原子操作中。
1.1.4 目的地目的地是客户用来指定它生产的消息的目标和它消费的消息的来源的对象。
JMS1.0.2规范中定义了两种消息传递域:点对点(PTP)消息传递域和发布/订阅消息传递域。
点对点消息传递域的特点如下:•每个消息只能有一个消费者。
•消息的生产者和消费者之间没有时间上的相关性。
无论消费者在生产者发送消息的时候是否处于运行状态,它都可以提取消息。
发布/订阅消息传递域的特点如下:•每个消息可以有多个消费者。
•生产者和消费者之间有时间上的相关性。
订阅一个主题的消费者只能消费自它订阅之后发布的消息。
JMS规范允许客户创建持久订阅,这在一定程度上放松了时间上的相关性要求。
持久订阅允许消费者消费它在未处于激活状态时发送的消息。
在点对点消息传递域中,目的地被成为队列(queue);在发布/订阅消息传递域中,目的地被成为主题(topic)。
1.1.5 消息生产者消息生产者是由会话创建的一个对象,用于把消息发送到一个目的地。
1.1.6 消息消费者消息消费者是由会话创建的一个对象,它用于接收发送到目的地的消息。
activemq maxinactivityduration
activemq maxinactivityduration摘要:I.简介- 简述ActiveMQ- 介绍maxInactivityDuration 的作用II.配置maxInactivityDuration- 讲解如何配置maxInactivityDuration- 分析配置选项及其影响III.maxInactivityDuration 的作用- 详细解释maxInactivityDuration 在ActiveMQ 中的作用- 描述其对消息队列和消费者的影响IV.实际应用案例- 提供一个使用maxInactivityDuration 的实际案例- 分析案例中如何利用maxInactivityDuration 优化消息队列V.总结- 总结maxInactivityDuration 的重要性- 提醒用户在配置时应注意的事项正文:ActiveMQ 是一个广泛使用的开源消息队列,它支持多种消息协议,如JMS、MQTT 等。
在ActiveMQ 中,有一个参数叫做maxInactivityDuration,它的作用是设置消费者空闲的最大时间。
当消费者在一段时间内没有接收消息时,ActiveMQ 会认为该消费者处于空闲状态,并触发相应的处理逻辑。
配置maxInactivityDuration 非常简单,只需要在ActiveMQ 的配置文件中添加或修改相应的参数即可。
例如,可以将maxInactivityDuration 设置为30000(30 秒),这样当消费者在30 秒内没有接收消息时,ActiveMQ 会认为消费者处于空闲状态。
maxInactivityDuration 在ActiveMQ 中的作用主要体现在以下几点:1.节省资源:当消费者长时间没有接收消息时,可以降低其优先级,从而减少资源占用。
2.提高吞吐量:通过设置合理的maxInactivityDuration,可以避免消费者长时间空闲而导致的性能下降,从而提高整个消息队列的吞吐量。
activemq 确认机制
activemq 确认机制ActiveMQ是一种常用的消息中间件,它提供了一种灵活可靠的消息通信机制,能够帮助开发者构建可靠的分布式系统。
其中,确认机制是ActiveMQ中的一个重要概念,本文将围绕确认机制展开,详细介绍其作用、实现原理以及使用方法。
一、确认机制的作用在消息通信中,确认机制起到了确保消息可靠传递的作用。
当消息发送者发送一条消息后,确认机制能够确保消息能够被正确地接收并处理。
如果消息发送失败或者接收方处理失败,确认机制能够触发重试机制,保证消息的可靠性。
确认机制还能够保证消息的顺序性,即按照发送的顺序依次接收和处理消息,避免消息的乱序。
二、确认机制的实现原理ActiveMQ的确认机制是基于ACK(Acknowledgment)机制实现的。
当消息发送者发送一条消息时,会等待接收者发送ACK确认消息已经接收。
如果接收者成功接收并处理消息,会发送一个ACK回执给发送者。
如果发送者在一定时间内未接收到ACK回执,会认为消息发送失败,会触发重试机制重新发送消息。
接收者也可以通过发送NACK(Negative Acknowledgment)回执来表示消息处理失败,发送者会根据NACK回执进行相应的处理。
三、确认机制的使用方法在使用ActiveMQ时,开发者可以根据自己的需求选择不同的确认机制。
ActiveMQ提供了三种确认机制:自动确认、手动确认和事务确认。
1. 自动确认自动确认是最简单的确认机制,当消息发送者发送一条消息后,ActiveMQ会立即发送ACK回执给发送者。
这种确认机制适用于不需要考虑消息的可靠性和顺序性的场景,例如广播消息等。
2. 手动确认手动确认是一种更为灵活的确认机制,发送者发送一条消息后,不会立即发送ACK回执。
接收者需要在接收并处理完消息后,手动调用acknowledge()方法发送ACK回执。
这种确认机制适用于需要保证消息的可靠性和顺序性的场景,例如订单处理等。
3. 事务确认事务确认是一种更为严格的确认机制,发送者发送一条消息后,不会立即发送ACK回执。
ActiveMQ持久化消息的三种方式【详细配置讲解】
ActiveMQ持久化消息的三种⽅式【详细配置讲解】利⽤消息队列的异步策略,可以从很⼤程序上缓解程序的压⼒,但是,如果MQ所在的机器down机了,⼜如果队列中的数据不是持久的就会发⽣数据丢失,后果是可想⽽知的,所以消息的持久化是不可不讨论的话题。
1) 关于ActiveMQ消息队列的持久化,主要是在ActiveMQ的配置⽂件中设置(看粗体部分).Java代码1. <!--2. Licensed to the Apache Software Foundation (ASF) under one or more3. contributor license agreements. See the NOTICE file distributed with4. this work for additional information regarding copyright ownership.5. The ASF licenses this file to You under the Apache License, Version 2.06. (the "License"); you may not use this file except in compliance with7. the License. You may obtain a copy of the License at8.9. /licenses/LICENSE-2.010.11. Unless required by applicable law or agreed to in writing, software12. distributed under the License is distributed on an "AS IS" BASIS,13. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.14. See the License for the specific language governing permissions and15. limitations under the License.16. -->17. <!-- START SNIPPET: example -->18. <beans19. xmlns="/schema/beans"20. xmlns:amq="/schema/core"21. xmlns:xsi="/2001/XMLSchema-instance"22. xsi:schemaLocation="/schema/beans /schema/beans/spring-beans-2.0.xsd23. /schema/core /schema/core/activemq-core.xsd24. /camel/schema/spring /camel/schema/spring/camel-spring.xsd">25.26. <!-- Allows us to use system properties as variables in this configuration file -->27. <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">28. <property name="locations">29. <value>file:///${activemq.base}/conf/credentials.properties</value>30. </property>31. </bean>32.33. <broker xmlns="/schema/core" brokerName="localhost" dataDirectory="${activemq.base}/data">34.35. <!-- Destination specific policies using destination names or wildcards -->36. <destinationPolicy>37. <policyMap>38. <policyEntries>39. <policyEntry queue=">" memoryLimit="5mb"/>40. <policyEntry topic=">" memoryLimit="5mb">41. <!-- you can add other policies too such as these42. <dispatchPolicy>43. <strictOrderDispatchPolicy/>44. </dispatchPolicy>45. <subscriptionRecoveryPolicy>46. <lastImageSubscriptionRecoveryPolicy/>47. </subscriptionRecoveryPolicy>48. -->49. </policyEntry>50. </policyEntries>51. </policyMap>52. </destinationPolicy>53.54. <!-- Use the following to configure how ActiveMQ is exposed in JMX -->55. <managementContext>56. <managementContext createConnector="false"/>57. </managementContext>58.58.59. <!-- The store and forward broker networks ActiveMQ will listen to -->60. <networkConnectors>61. <!-- by default just auto discover the other brokers -->62. <networkConnector name="default-nc" uri="multicast://default"/>63. <!-- Example of a static configuration:64. <networkConnector name="host1 and host2" uri="static://(tcp://host1:61616,tcp://host2:61616)"/>65. -->66. </networkConnectors>67.68. <persistenceAdapter>69. <amqPersistenceAdapter syncOnWrite="false" directory="${activemq.base}/data" maxFileLength="20 mb"/>70. </persistenceAdapter>71.72. <!-- Use the following if you wish to configure the journal with JDBC -->73. <!--74. <persistenceAdapter>75. <journaledJDBC dataDirectory="${activemq.base}/data" dataSource="#postgres-ds"/>76. </persistenceAdapter>77. -->78.79. <!-- Or if you want to use pure JDBC without a journal -->80.81. <span style="color: #ff6600;"> <span style="color: #000000;"><persistenceAdapter>82. <jdbcPersistenceAdapter dataSource="#mysql-ds"/>83. </persistenceAdapter></span></span>84.85.86. <sslContext>87. <sslContext keyStore="file:${activemq.base}/conf/broker.ks" keyStorePassword="password" trustStore="file:${activemq.base}/conf/broker.ts" trustStorePassword="password"/>88. </sslContext>89.90. <!-- The maximum about of space the broker will use before slowing down producers -->91. <systemUsage>92. <systemUsage>93. <memoryUsage>94. <memoryUsage limit="20 mb"/>95. </memoryUsage>96. <storeUsage>97. <storeUsage limit="1 gb" name="foo"/>98. </storeUsage>99. <tempUsage>100. <tempUsage limit="100 mb"/>101. </tempUsage>102. </systemUsage>103. </systemUsage>104.105.106. <!-- The transport connectors ActiveMQ will listen to -->107. <transportConnectors>108. <transportConnector name="openwire" uri="tcp://localhost:61616" discoveryUri="multicast://default"/>109. <transportConnector name="ssl" uri="ssl://localhost:61617"/>110. <transportConnector name="stomp" uri="stomp://localhost:61613"/>111. <transportConnector name="xmpp" uri="xmpp://localhost:61222"/>112. </transportConnectors>113.114. </broker>115.116. <!--117. ** Lets deploy some Enterprise Integration Patterns inside the ActiveMQ Message Broker118. ** For more details see119. **120. ** /enterprise-integration-patterns.html121. -->122. <camelContext id="camel" xmlns="/camel/schema/spring">123.124. <!-- You can use a <package> element for each root package to search for Java routes -->125. <package>org.foo.bar</package>126.127. <!-- You can use Spring XML syntax to define the routes here using the <route> element -->128. <route>129. <from uri="activemq:example.A"/>130. <to uri="activemq:example.B"/>130. <to uri="activemq:example.B"/>131. </route>132. </camelContext>133.134. <!--135. ** Lets configure some Camel endpoints136. **137. ** /camel/components.html138. -->139.140. <!-- configure the camel activemq component to use the current broker -->141. <bean id="activemq"class="ponent.ActiveMQComponent" >142. <property name="connectionFactory">143. <bean class="org.apache.activemq.ActiveMQConnectionFactory">144. <property name="brokerURL" value="vm://localhost?create=false&waitForStart=10000" />145. <property name="userName" value="${ername}"/>146. <property name="password" value="${activemq.password}"/>147. </bean>148. </property>149. </bean>150.151.152.153. <!-- Uncomment to create a command agent to respond to message based admin commands on the ActiveMQ.Agent topic -->154. <!--155. <commandAgent xmlns="/schema/core" brokerUrl="vm://localhost" username="${activemq .username}" password="${activemq.password}"/>156. -->157.158.159. <!-- An embedded servlet engine for serving up the Admin console -->160. <jetty xmlns="/schemas/jetty/1.0">161. <connectors>162. <nioConnector port="8161"/>163. </connectors>164.165. <handlers>166. <webAppContext contextPath="/admin" resourceBase="${activemq.base}/webapps/admin" logUrlOnStart="true"/ >167. <webAppContext contextPath="/demo" resourceBase="${activemq.base}/webapps/demo" logUrlOnStart="true"/ >168. <webAppContext contextPath="/fileserver" resourceBase="${activemq.base}/webapps/fileserver" logUrlOnStart= "true"/>169. </handlers>170. </jetty>171.172. <!-- This xbean configuration file supports all the standard spring xml configuration options -->173.174. <!-- Postgres DataSource Sample Setup -->175. <!--176. <bean id="postgres-ds"class="org.postgresql.ds.PGPoolingDataSource">177. <property name="serverName" value="localhost"/>178. <property name="databaseName" value="activemq"/>179. <property name="portNumber" value="0"/>180. <property name="user" value="activemq"/>181. <property name="password" value="activemq"/>182. <property name="dataSourceName" value="postgres"/>183. <property name="initialConnections" value="1"/>184. <property name="maxConnections" value="10"/>185. </bean>186. -->187.188. <!-- MySql DataSource Sample Setup -->189.190. <span style="color: #000000;"> </span><span style="color: #000000;"> <bean id="mysql-ds"class=" mons.dbcp.BasicDataSource" destroy-method="close">191. <property name="driverClassName" value="com.mysql.jdbc.Driver"/>192. <property name="url" value="jdbc:mysql://localhost:3306/activemq?relaxAutoCommit=true"/>193. <property name="username" value="root"/>194. <property name="password" value=""/>195. <property name="maxActive" value="200"/>196. <property<strong> </strong>name="poolPreparedStatements" value="true"/>197. </bean></span>198.199.200. <!-- Oracle DataSource Sample Setup -->201. <!--202. <bean id="oracle-ds"class="mons.dbcp.BasicDataSource" destroy-method="close">203. <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>204. <property name="url" value="jdbc:oracle:thin:@localhost:1521:AMQDB"/>205. <property name="username" value="scott"/>206. <property name="password" value="tiger"/>207. <property name="maxActive" value="200"/>208. <property name="poolPreparedStatements" value="true"/>209. </bean>210. -->211.212. <!-- Embedded Derby DataSource Sample Setup -->213. <!--214. <bean id="derby-ds"class="org.apache.derby.jdbc.EmbeddedDataSource">215. <property name="databaseName" value="derbydb"/>216. <property name="createDatabase" value="create"/>217. </bean>218. -->219.220. </beans>221. <!-- END SNIPPET: example -->改动部分主要是设置了mysql的datasource声明, 还有就是采⽤mysql作为persistenceAdapter,并声明如下。
activemq错误解决系列
activemq错误解决系列问题1: activemq启动的时候突然报这个错误,BeanFactory not initialized or already closed⽹上说是61616端⼝被占⽤,然后⽤netstat -na 在windows命令下运⾏,发现:TCP 192.168.1.155:61616 58.250.143.87:80 CLOSE_WAITClose_wait会占⽤⼀个TCP连接。
在windows命令下运⾏,netstat -aon|findstr "61616”,发现:TCP 192.168.1.155:61616 58.250.143.87:80 CLOSE_WAIT 7320在windows命令下运⾏,tasklist|findstr "7320",上⾯的7320是PID端⼝,获取:QQ.exe 7320 Console 6 272,940 K发现是QQ.ext占⽤了61616端⼝,关掉QQ,或者⽤命令来关掉线程:taskkill /f /t /im QQ.exe⽅法⼀:利⽤进程的PID结束进程taskkill /pid 7320 /f (/f指的是强⾏结束)同时要把启动activemq的命令窗⼝关闭。
这时可以正常启动activemq解决⽅式⼆:1.确认计算机主机名名称没有下划线;2.如果是win7,停⽌ICS(运⾏-->services.msc找到Internet Connection Sharing (ICS)服务,改成⼿动启动或禁⽤)。
重新启动activeMQ即可。
问题2:NoSuchMethodError: org.apache.activemq.ActiveMQConnectionFactory.setTrustAllPackages解决:发现在eclipse的maven dependencies⾥的activemq-core-5.7.0.jar包⾥有ActiveMQConnectionFactory这个类,但该类没有setTrustAllPackages⽅法。
Active MQ教程+配置
ActiveMQ-陈波Active MQ是一个基于Apcache 2.0licenced发布,开放源码的JMS产品。
其特点为:1)提供点到点消息模式和发布/订阅消息模式;2)支持JBoss、Geronimo等开源应用服务器,支持Spring框架的消息驱动;3)新增了一个P2P传输层,可以用于创建可靠的P2P JMS网络连接;4)拥有消息持久化、事务、集群支持等JMS基础设施服务。
Apache activemq是最受欢迎和最强大的开源消息中间件。
Apache activemq是非常快速的,支持多种跨客户端语言和协议,并且还有许多先进功能。
Apache activemq完全遵守JMS1.1和J2EE 1.4规范。
Apache activemq是在Apache 2.0License许可下发布的。
一.ActiveMQ是什么?ActiveMQ is the most popular and powerful open source MessageBus.ActiveMQ是一个完全支持JMS1.1和J2EE1.4规范的JMS Provider实现,尽管JMS 规范出台已经是很久的事情了,但是JMS在当今的J2EE应用中间仍然扮演着特殊的地位。
下面是它的特性列表1.多种语言和协议编写客户端。
语言:Java,C,C++,C#,Ruby,Perl,Python,PHP。
应用协议:OpenWire,Stomp REST,WS Notification,XMPP,AMQP2.完全支持JMS1.1和J2EE1.4规范(持久化,XA消息,事务)3.对Spring的支持,ActiveMQ可以很容得内嵌到使用Spring的系统里面去,而且也支持Spring2.0的特性4.通过了常见J2EE服务器(如Geronimo,JBoss4,GlassFish,WebLogic)的测试,其中通过JCA1.5resource adaptors的配置,可以让ActiveMQ可以自动的部署到任何兼容J2EE1.4商业服务器上5.支持多种传送协议:in-VM,TCP,SSL,NIO,UDP,JGroups,JXTA6.支持通过JDBC和journal提供高速的消息持久化7.从设计上保证了高性能的集群,客户端-服务器,点对点8.支持Ajax9.支持与Axis的整合10.可以很容易得调用内嵌JMS provider,进行测试二.ActiveMQ的竞争者1,其他开源JMS provider(资料来自):jbossmq(jboss4)jboss messaging(jboss5)joram-4.3.212006-09-22openjms-0.7.7-alpha-3.zip December26,2005mantamqubermqSomnifugiJMS2005-7-27开源的JMS Provider大部分都已经停止发展了,剩下的几个都是找到了东家,和某种J2EE 服务器挂钩,比如jboss mq与jboss,joram与jonas(objectweb组织),ActiveMQ与Geronimo(ASF APACHE基金组织),而在这3个之间,从网络底层来看,只有ActiveMQ使用了NIO,单从这个角度来看ActiveMQ在性能上会有一定的优势。
ACTIVEMQ入门教程
ACTIVEMQ入门教程ActiveMQ是一个开源的消息中间件,它具有高性能、可靠性和可扩展性的特点,可以在分布式系统中处理大量的消息通信。
本教程将介绍如何入门使用ActiveMQ,包括安装配置、基本概念和使用方法等。
一、安装配置3. 启动ActiveMQ:进入解压目录,找到bin文件夹,执行activemq命令(Windows下执行activemq.bat,Linux下执行activemq.sh)。
5. 配置连接信息:在管理控制台中,可以配置ActiveMQ的连接信息,包括端口号、用户名、密码等。
二、基本概念1. Broker:Broker是ActiveMQ中的核心组件,负责接收和分发消息。
一个Broker可以同时连接多个生产者和消费者。
2. Destination:Destination是消息发送和接收的目的地。
可以分为两种类型:Queue和Topic。
Queue用于Point-to-Point的消息通信,每个消息只能被一个消费者接收;Topic用于Publish/Subscribe的消息通信,每个消息可以被多个订阅者接收。
3. Producer:Producer是消息的发送者,负责将消息发送到Broker的Destination中。
4. Consumer:Consumer是消息的接收者,负责从Broker的Destination中接收消息。
5. Message:Message是ActiveMQ中的消息对象,包含消息的内容和一些元数据信息。
三、使用方法1. 发送和接收消息:首先需要创建一个连接,并创建一个会话。
然后创建一个Destination,并创建一个Producer发送消息到该Destination中。
接收消息的方法类似,创建一个Destination,并创建一个Consumer用于接收消息。
2. 消息过滤:可以通过消息选择器来过滤消息。
消息选择器使用SQL-92语法来选择消息。
例如,可以通过消息属性来选择消息:consumer.receive("color = 'red'")。
ActiveMQ简介
ActiveMQ简介我们都知道ActiveMQ是消息中间件,⾸先我们先来了解下⼀些相关的概念;消息“消息”是在两台计算机间传送的数据单位。
消息可以⾮常简单,例如只包含⽂本字符串;也可以更复杂,可能包含嵌⼊对象。
消息队列“消息队列”是在消息的传输过程中保存消息的容器,消息队列管理器在将消息从它的源中继到它的⽬标时充当中间⼈,队列的主要⽬的是提供路由并保证消息的传递;如果发送消息时接收者不可⽤,消息队列会保留消息,直到可以成功地传递它。
消息队列的特点消息队列的主要特点是异步处理,主要⽬的是减少请求响应时间和解耦。
所以主要的使⽤场景就是将⽐较耗时⽽且不需要即时(同步)返回结果的操作作为消息放⼊消息队列。
同时由于使⽤了消息队列,只要保证消息格式不变,消息的发送⽅和接收⽅并不需要彼此联系,也不需要受对⽅的影响,即解耦和。
ActiveMQ简介ActiveMQ是Apache软件基⾦会所研发的开放源代码消息中间件;由于ActiveMQ是⼀个纯Java程序,因此只需要操作系统⽀持Java虚拟机,ActiveMQ便可执⾏。
对Spring的⽀持,ActiveMQ可以很容易内嵌到使⽤Spring的系统⾥⾯去通过了常见J2EE服务器的测试ActiveMQ⾓⾊介绍1,Destination ⽬的地,消息发送者需要指定Destination才能发送消息,接收者需要指定Destination才能接收消息。
2,Producer 消息⽣产者,负责发送Message到⽬的地3,Consumer/Receiver 消息消费者,负责从⽬的地中消费(处理/监听/订阅)Message4,Message 消息消息封装⼀次通信的内容。
这⾥我们在spring整合ActiveMQ来写个⼩例⼦.先创建⼀个maven项⽬,并在pom.xml添加相关依赖,如下:<dependencies><!-- ActiveMQ客户端完整jar包依赖 --><dependency><groupId>org.apache.activemq</groupId><artifactId>activemq-all</artifactId><version>5.9.0</version></dependency><!-- ActiveMQ和Spring整合配置⽂件标签处理jar包依赖 --><dependency><groupId>org.apache.xbean</groupId><artifactId>xbean-spring</artifactId><version>4.5</version></dependency><!-- Spring-JMS插件相关jar包依赖 --><dependency><groupId>org.springframework</groupId><artifactId>spring-jms</artifactId><version>4.1.6.RELEASE</version></dependency><!-- Spring框架上下⽂jar包依赖 --><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>4.1.6.RELEASE</version></dependency></dependencies>然后定义消息载体类型. 即要在ActiveMQ中传递的数据实体类型,消息载体对象必须实现接⼝java.io.Serializable, 因为消息需要在⽹络中传递,要求必须可序列化。
Mahout in action中文版
mahout in action 中文翻译第1章初识mahout mahout in action 中文翻译1. 初识Mahout本章涵盖以下内容:∙Apache Mahout是什么?∙现实中推荐系统引擎、聚类、分类概述∙配置mahout读者可能从本书的标题中依然知晓,本书是一本使用的工具书,讲解如何将mahout应用于业界。
Mahout是Apache开源的机器学习库。
它实现的算法都被归入机器学习或者集体智慧的范畴,但是在这里Mahout主要注重协同过滤/推荐引擎、聚类和分类。
Mahout是可伸缩的。
Mahout致力于实现海量数据,单机无法处理情况下的机器学习工具。
在目前阶段,这种可伸缩性由java实现,有些部分基于Apache Hadoop 这个分布式计算框架实现。
Mahout是java库。
它不支持用户接口,预装好的服务器。
以及安装等功能。
它是一个利于开发者使用的工具框架。
1.1 Mahout适合你吗?你也许想知道-Mahout是一个什么工程,或者是一本什么书?如果你在找一本机器学习的教材,那本书就不适合了。
本书没有尝试去全面解释各种算法和展现技术的理论基础和来源。
阅读本书可以,但不保证,能够对机器学习技术,类似矩阵、向量等相关概念的熟悉。
如果你正在开发现代智能应用,那本书很适合。
这本书提供了一种实践非理论的处理方式,有完整的实例、解决方法指南。
这本书在展示Mahout如何展示解决这些问题的时候,证明了一些被有经验的开发者收集的独特见解。
如果你是一个人工智能、机器学习以及相关领域的研究者,也适合用本书。
你最大的挑战就是将一个新算法代码实现,Mahout提供了一个丰富的框架,模式集合以及测试、部署大规模新算法的现成模块。
这本书是一张快车票,让你的机器学习算法运行在复杂的分布式计算框架上。
如果你正在领导一个产品团队或者初创公司想利用机器学习创造竞争优势,这本书也适合你。
通过真实世界的例子,这本书可以启发你很多技术可能有多种实现方式的想法。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1 JMS在介绍ActiveMQ之前,首先简要介绍一下JMS规范。
1.1 JMS的基本构件1.1.1 连接工厂连接工厂是客户用来创建连接的对象,例如ActiveMQ提供的ActiveMQConnectionFactory。
1.1.2 连接JMS Connection封装了客户与JMS提供者之间的一个虚拟的连接。
1.1.3 会话JMS Session是生产和消费消息的一个单线程上下文。
会话用于创建消息生产者(producer)、消息消费者(consumer)和消息 (message)等。
会话提供了一个事务性的上下文,在这个上下文中,一组发送和接收被组合到了一个原子操作中。
1.1.4 目的地目的地是客户用来指定它生产的消息的目标和它消费的消息的来源的对象。
JMS1.0.2规范中定义了两种消息传递域:点对点 (PTP)消息传递域和发布/订阅消息传递域。
点对点消息传递域的特点如下:每个消息只能有一个消费者。
消息的生产者和消费者之间没有时间上的相关性。
无论消费者在生产者发送消息的时候是否处于运行状态,它都可以提取消息。
发布/订阅消息传递域的特点如下:每个消息可以有多个消费者。
生产者和消费者之间有时间上的相关性。
订阅一个主题的消费者只能消费自它订阅之后发布的消息。
JMS规范允许客户创建持久订阅,这在一定程度上放松了时间上的相关性要求。
持久订阅允许消费者消费它在未处于激活状态时发送的消息。
在点对点消息传递域中,目的地被成为队列(queue);在发布/订阅消息传递域中,目的地被成为主题(topic)。
1.1.5 消息生产者消息生产者是由会话创建的一个对象,用于把消息发送到一个目的地。
1.1.6 消息消费者消息消费者是由会话创建的一个对象,它用于接收发送到目的地的消息。
消息的消费可以采用以下两种方法之一:同步消费。
通过调用 消费者的receive方法从目的地中显式提取消息。
receive方法可以一直阻塞到消息到达。
异步消费。
客户可以为消费者注册一个消息监听器,以定义在消息到达时所采取的动作。
1.1.7 消息JMS消息由以下三部分组成:消息头。
每个消息头字段都有相应的getter和setter方法。
消息属性。
如果需要除消息头字段以外的值,那么可以使用消息属性。
消息体。
JMS定义的消息类型有TextMessage、MapMessage、BytesMessage、StreamMessage和 ObjectMessage。
1.2 JMS的可靠性机制1.2.1 确认JMS消息只有在被确认之后,才认为已经被成功地消费了。
消息的成功消费通常包含三个阶段:客户接收消息、客户处理消息和消息被确认。
在事务性会话中,当一个事务被提交的时候,确认自动发生。
在非事务性会话中,消息何时被确认取决于创建会话时的应答模式(acknowledgement mode)。
该参数有以下三个可选值:Session.AUTO_ACKNOWLEDGE。
当客户成功的从receive方法返回的时候,或者从MessageListener.onMessage方法成功返回的时候,会话自动确认客户收到的消息。
Session.CLIENT_ACKNOWLEDGE。
客户通过消息的acknowledge方法确认消息。
需要注意的是,在这种模式中,确认是在会话层上进行:确认一个被消费的消息将自动确认所有已被会话消费的消息。
例如,如果一个消息消费者消费了10个消息,然后确认第5个消息,那么所有10个消息都被确认。
Session.DUPS_ACKNOWLEDGE。
该选择只是会话迟钝的确认消息的提交。
如果JMS provider失败,那么可能会导致一些重复的消息。
如果是重复的消息,那么JMS provider必须把消息头的JMSRedelivered字段设置为true。
1.2.2 持久性JMS 支持以下两种消息提交模式:PERSISTENT。
指示JMS provider持久保存消息,以保证消息不会因为JMS provider的失败而丢失。
NON_PERSISTENT。
不要求JMS provider持久保存消息。
1.2.3 优先级可以使用消息优先级来指示JMS provider首先提交紧急的消息。
优先级分10个级别,从0(最低)到9(最高)。
如果不指定优先级,默认级别是4。
需要注意的是,JMS provider并不一定保证按照优先级的顺序提交消息。
1.2.4 消息过期可以设置消息在一定时间后过期,默认是永不过期。
1.2.5 临时目的地可以通过会话上的createTemporaryQueue方法和createTemporaryTopic方法来创建临时目的地。
它们的存在时间只限于创建它们的连接所保持的时间。
只有创建该临时目的地的连接上的消息消费者才能够从临时目的地中提取消息。
1.2.6 持久订阅首先消息生产者必须使用PERSISTENT提交消息。
客户可以通过会话上的createDurableSubscriber方法来创建一个持久订阅,该方法的第一个参数必须是一个topic。
第二个参数是订阅的名称。
JMS provider会存储发布到持久订阅对应的topic上的消息。
如果最初创建持久订阅的客户或者任何其它客户使用相同的连接工厂和连接的客户ID、相同的主题和相同的订阅名再次调用会话上的createDurableSubscriber方法,那么该持久订阅就会被激活。
JMS provider会向客户发送客户处于非激活状态时所发布的消息。
持久订阅在某个时刻只能有一个激活的订阅者。
持久订阅在创建之后会一直保留,直到应用程序调用会话上的unsubscribe方法。
1.2.7 本地事务在一个JMS客户端,可以使用本地事务来组合消息的发送和接收。
JMS Session 接口提供了commit和rollback方法。
事务提交意味着生产的所有消息被发送,消费的所有消息被确认;事务回滚意味着生产的所有消 息被销毁,消费的所有消息被恢复并重新提交,除非它们已经过期。
事务性的会话总是牵涉到事务处理中,commit或rollback方法一旦被调用,一个事务就结束了,而另一个事务被开始。
关闭事务性会话将回滚其中的事务。
需要注意的是,如果使用请求/回复机制,即发送一个消息,同时希望在同一个事务中等待接收该消息的回复,那么程序将被挂起,因为知道事务提 交,发送操作才会真正执行。
需要注意的还有一个,消息的生产和消费不能包含在同一个事务中。
1.3 JMS 规范的变迁JMS的最新版本的是1.1。
它和同1.0.2版本之间最大的差别是,JMS1.1通过统一的消息传递域简化了消息传递。
这不仅简化了JMS API,也有利于开发人员灵活选择消息传递域,同时也有助于程序的重用和维护。
以下是不同消息传递域的相应接口:JMS 公共点对点域发布/订阅域ConnectionFactory QueueConnectionFactory TopicConnectionFactoryConnection QueueConnection TopicConnectionDestination Queue TopicSession QueueSession TopicSession MessageProducer QueueSender TopicPublisher MessageConsumer QueueReceiver TopicSubscriber2 ActiveMQ2.1 Broker2.1.1 Running BrokerActiveMQ5.0 的二进制发布包中bin目录中包含一个名为activemq的脚本,直接运行这个脚本就可以启动一个broker。
此外也可以通过Broker Configuration URI或Broker XBean URI对broker 进行配置,以下是一些命令行参数的例子:Example Descriptionactivemq Runs a broker using the default'xbean:activemq.xml' as the broker configuration file.activemq xbean:myconfig.xml Runs a broker using the file myconfig.xml as the broker configuration file that is located in the classpath.activemq xbean:file:./conf/broker1.xml Runs a broker using the file broker1.xml as the broker configuration file that is located in the relative filepath ./conf/broker1.xmlactivemqxbean:file:C:/ActiveMQ/conf/broker2.xml Runs a broker using the file broker2.xml as the brokerconfiguration file that is located in the absolute file pathC:/ActiveMQ/conf/broker2. xmlactivemq broker:(tcp://localhost:61616, tcp://localhost:5000)?useJmx=true Runs a broker with two transport connectors and JMX enabled.activemq broker:(tcp://localhost:61616, network:tcp://localhost:5000)?persistent=f alse Runs a broker with 1 transport connector and 1 network connector with persistence disabled.2.1.2 Embedded Broker可以通过在应用程序中以编码的方式启动broker,例如:Java代码1.BrokerService broker = new BrokerService();2.broker.addConnector("tcp://localhost:61616");3.broker.start();如果需要启动多个broker,那么需要为broker设置一个名字。
例如:Java代码1.BrokerService broker = new BrokerService();2.broker.setName("fred");3.broker.addConnector("tcp://localhost:61616");4.broker.start();如果希望在同一个JVM内访问这个broker,那么可以使用VM Transport,URI 是:vm://brokerName。