ActiveMQ in Action_中文

合集下载

activemq面试题

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用法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的配置

(转)关于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中,主从切换是一个关键的特性,可以确保在主服务器宕机时,从服务器可以接管消息传输的任务。

下面是ActiveMQ主从切换的原理:
1. 主服务器和从服务器都连接到同一个共享的存储(如数据库、文件系统),共享的存储中保存着消息队列中的数据。

2. 主服务器负责处理消息的生产和消费,并将消息写入共享的
存储中。

3. 从服务器监听主服务器发送的数据变化,并从共享的存储中
读取数据。

4. 当主服务器宕机时,从服务器会检测到这个状态,并会接管
成为新的主服务器。

5. 新的主服务器会接管消息的生产和消费,并继续将消息写入
共享的存储中。

6. 一旦原来的主服务器恢复正常,它会重新连接到共享的存储,并成为从服务器,接收并处理新的数据变化。

通过在主服务器和从服务器之间共享存储,ActiveMQ实现了主从切换的高可用性。

当主服务器宕机时,从服务器会接管消息传输任务,确保消息的可靠传递。

而当主服务器恢复正常时,它会重新连接到共
享的存储,并从中读取新的数据变化,实现了主从切换的无缝切换。

activemq消息机制原理

activemq消息机制原理

activemq消息机制原理
ActiveMQ消息机制的原理主要包括以下几点:
1. 消息的发送:ActiveMQ支持同步和异步两种发送模式。

同步发送过程中,发送者发送一条消息会阻塞直到broker反馈一个确认消息,表示消息已经
被broker处理。

这个机制提供了消息的安全性保障,但由于是阻塞的操作,会影响到客户端消息发送的性能。

异步发送的过程中,发送者不需要等待broker提供反馈,所以性能相对较高。

但是可能会出现消息丢失的情况。

2. 消息的接收:ActiveMQ服务端会根据消息对应的目标模型(p2p/topic)将消息发送给可以接受的消费者。

期间默认会将数据进行持久化,并等待消费者签收消息后才会将消息删除,避免消息丢失。

3. 消息的传递:ActiveMQ的作用就是实现跨网络的习性与系统剑通信,可以将业务解耦,提供异步消息支持,增加系统并发量。

比如原本执行一个操作需要1s,那么用户请求后必须等待1s之后才会得到响应,引入MQ之后,我们可以仅仅只做简单的校验流程,确认该操作可以执行时,将消耗的操作使用异步消息通知,并直接返回用户操作成功,而专门处理该业务的服务者监听该消息,一旦有消息之后就开始处理。

以上是ActiveMQ消息机制的原理,供您参考,如需更多信息,建议查阅关于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集群的使用与配置

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的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参数。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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。

相关文档
最新文档