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学习-主从备份及安全配置

安装要求: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(中文)参考手册

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方法可以一直阻塞到消息到达。

ActiveMQ消息服务配置

ActiveMQ消息服务配置

ActiveMQ消息服务的目录结构如下:其中bin目录为运行目录,conf为配置目录,data为数据和日志目录。

消息服务启动为bin目录下的activemq.bat批处理文件(windows下)。

消息服务正式环境下建议安装为服务方式。

服务安装相关入口程序在bin\win32(64位操作系统为win64目录)目录下,运行InstallService.bat即可安装服务,UninstallService.bat可卸载服务。

如果运行报错,请到命令行中输入该批处理运行。

在win7或2008下如果安装报错则需要以管理员身份运行命令行,然后再运行相关批处理。

安装成功后在服务中会有名称为activemq的服务。

在win7或2008下服务启动报错(日志在data目录下的activemq.log、wrapper.log),过一段时间后会显示为非启动状态,此时查看日志是否报错,如果报错则尝试在bin\win32目录下增加work目录和temp目录再重启启动。

如果启动成功后在浏览器中输入http://127.0.0.1:8161/admin,出现activemq管理页面则说明安装成功。

消息服务的配置:1.内存配置消息服务的最大内存即java可用的最大内存在不同操作系统下不同java 版本是不一样的,在命令行中运行java -Xmx1512m –version(如果只安装了jre则到jre目录下的bin目录下运行),如果提示Error occurred during initialization of VM则说明不支持1512m内存,可减少128m再重复运行,直到找到jvm的最大内存。

然后到启动程序activemq.bat中找到if "%ACTIVEMQ_OPTS%" == "" set ACTIVEMQ_OPTS=-Xms1512M -Xmx1512MeDedicatedTaskRunner=true -Djava.util.logging.config.file=logging.properties行,把Xms1512M和-Xmx1512M从1512调到测试出的java最大内存即可。

配置标准ActiveMQ组件--连接到ActiveMQ .

配置标准ActiveMQ组件--连接到ActiveMQ .

使用ActiveMQ看起来很简单直接:启动它,发送消息,接收消息。

但是你没有看到隐藏在这些步骤后面的细节。

理解这些细节和自定义配置需要更多的例子来说明。

虽然ActiveMQ提供了大量的配置选项,但是理解一些核心的选项对于大多数应用是很必要的。

第二部分深入到ActiveMQ关键的配置选项,包括连接,消息持久化,安全。

这三个主题是你使用ActiveMQ最先遇到的问题,所以率先理解它们很重要。

第4章:连接到ActiveMQ本章内容:∙ActiveMQ连接器URIs的描述和演示∙客户端如何使用传输连接器连接ActiveMQ∙如何使用网络连接器创建一个集群ActiveMQ消息代理器ActiveMQ等JMS代理器的目的是为客户端应用提供一个交互的架构。

所以,ActiveMQ提供连接器(connectors)。

连接器提供客户端到代理器的交互(使用transport connectors),和代理器间的交互(使用network connectors)。

ActiveMQ允许客户端使用各种协议进行连接,同时也运行代理器间通过连接通道来形成复杂的连接器网络。

这章我们先解释连接器URIs,它们是用来指明代理器的地址的。

之后,我们介绍传输连接器(transport connectors)以及有哪些协议可以用来连接ActiveMQ代理器。

注意:我们这里会用到连接器(connector)和协议(protocol)两个概念。

协议是一个通用的概念,而连接器是ActiveMQ特定的一个东西。

每个ActiveMQ连接器,实现一个特定的协议,并用它来作为自己的名字。

对于下面将的内容要注意我们是在讨论某个协议还是在讨论一个特定的ActiveMQ连接器。

我们先解释如果配置传输连接器。

然后,我们修改股票投资的例子,使之使用各种不同的连接器,并演示该例子。

看完该例子后,我们移到特定的连接器,讨论的传输连接器将包括TCP,SSL和H TTP。

接下来,我们将介绍使用VM协议的嵌入式代理器。

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开发手册范本

ActiveMQ开发手册范本

1. 背景当前,CORBA、DCOM、RMI等RPC中间件技术已广泛应用于各个领域。

但是面对规模和复杂度都越来越高的分布式系统,这些技术也显示出其局限性:(1)同步通信:客户发出调用后,必须等待服务对象完成处理并返回结果后才能继续执行;(2)客户和服务对象的生命周期紧密耦合:客户进程和服务对象进程都必须正常运行;如果由于服务对象崩溃或者网络故障导致客户的请求不可达,客户会接收到异常;(3)点对点通信:客户的一次调用只发送给某个单独的目标对象。

面向消息的中间件(Message Oriented Middleware,MOM)较好的解决了以上问题。

发送者将消息发送给消息服务器,消息服务器将消息存放在若干队列中,在合适的时候再将消息转发给接收者。

这种模式下,1)发送和接收是异步的,发送者无需等待;2)二者的生命周期未必相同:发送消息的时候接收者不一定运行,接收消息的时候发送者也不一定运行;3)一对多通信:对于一个消息可以有多个接收者。

已有的 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 接口的消息中间件(provider:供应者);PTP:Point to Point,即点对点的消息模型;Pub/Sub:Publish/Subscribe,即发布/订阅的消息模型;Queue:队列目标; Topic:主题目标;Transaction:事务。

activeMQ操作手册

activeMQ操作手册

一、安装部署1、下载,下载0.0 Windows Distribution版本2、安装直接解压至任意目录(如:)3、启动 ActiveMQ效劳cmd到bin目录下直接运行: start启动成功:4、ActiveMQ消息治理后台系统:localhost:8161/admin(随包附带jetty、可直接启动)默许用户名:admin默许密码:admin※在conf/jetty-里能够修改用户和密码创建一个Queue二、Queue与 Topic 的比较1、JMS Queue 执行 load balancer语义:一条消息仅能被一个 consumer(消费者) 收到。

若是在 message 发送的时候没有可用的consumer,那么它将被保留一直到能处置该 message 的 consumer 可用。

若是一个consumer 收到一条 message 后却不响应它,那么这条消息将被转到另一个consumer 那儿。

一个 Queue 能够有很多 consumer,而且在多个可用的 consumer中负载均衡。

注:点对点消息传递域的特点如下:•每一个消息只能有一个消费者。

•消息的生产者和消费者之间没有时刻上的相关性。

不管消费者在生产者发送消息的时候是不是处于运行状态,它都能够提取消息。

2、Topic 实现 publish和 subscribe 语义:一条消息被 publish时,它将发到所有感爱好的定阅者,因此0到多个subscriber将接收到消息的一个拷贝。

可是在消息代理接收到消息时,只有激活定阅的subscriber能够取得消息的一个拷贝。

注:发布/定阅消息传递域的特点如下:•每一个消息能够有多个消费者。

•生产者和消费者之间有时刻上的相关性。

定阅一个主题的消费者只能消费自它定阅以后发布的消息。

JMS 标准予诺客户创建持久定阅,这在必然程度上放松了时刻上的相关性要求。

持久定阅许诺消费者消费它在未处于激活状态时发送的消息。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

ActiveMQ配置参考手册1ActiveMQ Server端配置1.1 设置Broker名字修改%activemq%/conf/activemq.xml文件1.2设置persistenceAdapter修改%activemq%/conf/activemq.xml文件1.3 设置destinationPolicy打开%activemq%/conf/activemq.xml文件,添加如下红色配置属性:1.4设置networkConnectors修改%activemq%/conf/activemq.xml文件1.5 设置transportConnectors 修改%activemq%/conf/activemq.xml文件2ActiveMQ Client端连接配置目前Client端使用Failover协议组合TCP协议的方式连接broker,示例如下:可以看到,tcp协议和failover协议分别支持一些不同的连接配置参数。

如示例URL中的soTimeout和randomize。

下面就TCP协议和Failover协议的连接配置参数分别进行详细介绍。

2.1TCP连接参数配置2.1.1The TCP Transport Options2.1.2The OpenWire Wire Format OptionsOpenWire is the default Wire Format that ActiveMQ uses. It provides a highly efficent binary format for high speed messaging. OpenWire options can be configured on a JMS client's2.2Failover协议参数配置The Failover configuration syntax allows you to specify any number of composite uris. The Failover transport randomly chooses one of the composite URI and attempts to establish a connection to it. If it does not succeed or if it subsequently fails, a new connection is established to one of the other uris in the list.2.2.1The Failover Transport OptionsNotesIf you use failover, and a broker dies at some point, your sends will block by default. Using TransportListener can help with this regard. It is best to set the Listener directly on the ActiveMQConnectionFactory so that it is in place before any request that may require an network hop.Additionally you can use timeout option which will cause your current send to fail after specified timeout. The following URL, for example:will cause send to fail after 3 seconds if the connection isn't established. The connection will not be killed, so you can try sending messages later at some point using the same connection (presumably some of your brokers will be available again). Timeouts on the failover transport are available since 5.3 version.大意如下:在使用failover协议时,如果broker发生僵死的情况,则在默认情况下消息生产者将会被阻塞。

可以使用TransportListener或者在连接broker URL中增加timeout参数的方式来解决这个问题。

若使用后者,则发送消息超过指定超时时间后,将会抛出一个JMS异常。

但值得注意的是,该无效的连接并不会被“杀死”。

3ActiveMQ性能调优3.1持久化(persistent)Using persistent messaging is quite a bit slower than non-persistent messaging. Many things are a tradeoff in IT between performance and quality of service.With non-persistent messaging, things are reliable - unless the broker is killed in which case any messages in the broker are lost. Persistent messaging avoids this by ensuring by default that every message is written to disk before the MessageProducer.send() method returns.Even if you need persistent messaging there are various things you can do to speed things up - such as do you really need to block the sender to wait until the message is physically on disk on the broker before being able to send another message? There now follows a number of options you can consider if you need the extra safety of persistent messaging.到底采取何种持久化方式,应取决于具体应用对性能(performance)和服务质量(QOS)这两个因素的要求。

如果是性能要求较高的话则建议采用非持久化方式;如果对服务质量要求较高则建议采用持久化方式。

下表列出了目前可选的持久化方式(注:下表按消息发送&消费速度由高到低的顺序排列):从安全性和性能的综合角度考虑,我们建议选择KahaDB持久化方式。

3.2事务If you are using persistent messaging and you don't want to use Async Sends then you should use JMS transactions to batch up many operations inside a single transaction. Even if you have to pay the performance cost of XA transactions - using batching (processing and sending many messages in a single transaction (JMS or XA) will boost performance considerably. This is because you share the synchrony cost (the waiting for things to be written and sync'd to disk) across many many messages.3.3异步发送If you enable Async Sends then you will reduce the blocking in senders which increases throughput.采用异步发送是为了提高生产者发送消息的速度(在消息持久化的场合下可能会引起消息丢失),因此可以在生产能力不足时酌情使用。

注:默认情况下发送持久化消息是采取同步方式的,这样在broker将每一条消息进行持久化并向生产者返回应答(acknowledgement)之前,生产者的发送方法将会产生阻塞。

如果采用异步发送,生产者将不再等待来自broker的应答,此时若broker一旦宕机,则无法保证每条已发送的消息都被写入持久化介质(如物理文件等)。

3.4增加prefetch大小ActiveMQ will push as many messages to the consumer as fast as possible, where they will be queued for processing by an ActiveMQ Session. The maximum number of messages that ActiveMQ will push to a Consumer without the Consumer processing a message is set by thepre-fetch size. You can improve throughput by running ActiveMQ with larger pre-fetch sizes. Pre-fetch sizes are determined by the ActiveMQPrefetchPolicy bean, which is set on the ActiveMQ ConnectionFactory.ActiveMQ uses a prefetch size to determine how many messages are streamed to a JMS consumer. The higher this number then typically the higher the throughput of the consumers as it typically means under heavy message load then the consumer always has more messages available immediately in RAM for processing - rather than having to wait for messages to be read and parsed from a socket.适用于消息消费速度较快的场合,采用更大的prefetch size以防止消费者进入等待状态。

相关文档
最新文档