❶ 如何建立Master/Slave + Broker Cluster的ActiveMQ集群
ActiveMQ具有强大和灵活的集群功能,但在使用的过程中会发现很多的缺点,ActiveMQ的集群方式主要由两种:Master-Slave和Broker Cluster。1、Master-SlaveMaster-Slave方式中,只能是Master提供服务,Slave是实时地备份Master的数据,以保证消息的可靠性。当Master失效时,Slave会自动升级为Master,客户端会自动连接到Slave上工作。Master-Slave模式分为三类:Pure Master Slave、Shared File System Master Slave和JDBC Master Slave。(1)PureMaster Slave需要两个Broker,一个作为Master,另一个作为Slave,运行时,Slave通过网络实时从Master处复制数据,同时,如果Slave和Master失去连接,Slave就会自动升级为Master,继续为客户端提供消息服务,如图所示:实践时,我们使用两个ActiveMQ服务器,一个作为Master,Master不需要做特殊的配置;另一个作为Slave,配置${ACTIVEMQ_HOME}/conf/activemq.xml文件,在<broker>节点中添加连接到Master的URI和设置Master失效后不关闭Slave,如下:<broker xmlns=" " brokerName="pure_slave"masterConnectorURI="tcp://0.0.0.0:61616" shutdownOnMasterFailure="false" dataDirectory="${activemq.base}">同时修改Slave的服务端口,如:<transportConnectors><transportConnector name="openwire" uri="tcp://0.0.0.0:61617"/></transportConnectors>为了看到实践的效果,Master和Slave的消息持久化介质都是采用MySQL,并且Master和Slave分别连接不同的数据库。在消息生产者应用和消息消费者应用的Spring配置文件中添加以下红色内容:<property name="brokerURL" value="failover:(tcp://localhost:61616,tcp://localhost:61617)?initialReconnectDelay=100" />配置完成后,我们可以通过以下步骤来进行测试:A、启动Master和Slave,启动消息生产者应用,并分别发送一些Queue消息和Topic消息,如果此时订阅Topic消息的消费者设置了clientID,我们就可以在Master的数据库和Slave的数据库中看到尚未消费的消息,包括Queue和Topic的消息;B、启动消费者应用,可以接收到消息;C、关闭消费者,生产者继续发送一些消息A;D、停止Master;E、生产者继续发送消息B;F、启动消费者应用,消费者可以接收到消息A和消息B,说明Slave接替了Master的工作并复制了Master的消息。这种方式只能两台机器做集群,可以起到很好的双机热备功能,但只能失效一次,只能停机恢复Master-Slave结构。(2)SharedFile System Master SlaveSharedFile System Master Slave就是利用共享文件系统做ActiveMQ集群,是基于ActiveMQ的默认数据库kahaDB完成的,kahaDB的底层是文件系统。这种方式的集群,Slave的个数没有限制,哪个ActiveMQ实例先获取共享文件的锁,那个实例就是Master,其它的ActiveMQ实例就是Slave,当当前的Master失效,其它的Slave就会去竞争共享文件锁,谁竞争到了谁就是Master。这种模式的好处就是当Master失效时不用手动去配置,只要有足够多的Slave。Shared File System Master Slave模式如图所示:本例子是在一台机器上运行三个ActiveMQ实例,需要对ActiveMQ的配置文件做一些简单的配置,就是把持久化适配器的存储目录改为本地磁盘的一个固定目录
❷ 求activeMQ 配置
主要是设置java的环境变量就可以了(JAVA_HOME和CLASSPATH)。如果是ActiveMQ 5.5.0的话,直接运行就可以了
❸ 前端angela框架监听activemq需要什么配置
1、修改conf/中的activemq.xml;2、修改jmx.access和jmx.password,配置添加JMS登陆用户和密码;3、打开activemq解压目录/bin/activemq.bat 编辑;4、重启activemq如启动activemq时,窗口一闪就显示了,当获取到异常,解决方法:运行cmd 切换至 activemq解压目录/conf ,运行如下命令,修改访问权限;至此完毕,重启activemq
❹ IBM的MQ和Active MQ相比有哪些优点和不足
1. IBM WebSphere MQ消息中间件有很多的特性和优点,使用IBM WebSphere MQ可以简化和优化消息通讯的应用设计。为了满足用户各种不同的应用的通讯需求,IBM WebSphere MQ采用了大量业界领先的技术,并拥有许多先进的功能,其中很多是其他厂商所无能为力的。将这些技术和功能应用到客户的通讯系统之中,可以简化应用逻辑,优化系统架构,从而提高整个系统的可靠性、可用性和可扩展性。下面将介绍怎样使用IBM WebSphereMQ的一些特性来简化程序。2. ActiveMQ速度非常快;一般要比jbossMQ快10倍。优点:是一个快速的开源消息组件(框架),支持集群,同等网络,自动检测,TCP,SSL,广播,持久化,XA,和J2EE1.4容器无缝结合,并且支持轻量级容器和大多数跨语言客户端上的Java虚拟机。消息异步接受,减少软件多系统集成的耦合度。消息可靠接收,确保消息在中间件可靠保存,多个消息也可以组成原子事务。缺点:ActiveMQ默认的配置性能偏低,需要优化配置,但是配置文件复杂,ActiveMQ本身不提供管理工具;示例代码少;主页上的文档看上去比较全面,但是缺乏一种有效的组织方式,文档只有片段,用户很难由浅入深进行了解,二、文档整体的专业性太强。在研究阶段可以通过查maillist、看Javadoc、分析源代码来了解。
❺ activemq用spring怎么配置messageconsumer
首先,如果知道了activemq的工作原理,以及spring是如何来调用activemq,估计你就知道怎么配置了,这里我先说一下,amq的工作原理和spring在调用amq时的工作流程,然后再给出配置文件,相信你会更加明白。
工作的时候,部署结构如下(图有点大,使用右键->在新标签页打开):
<beansxmlns=" xmlns:xsi=" xsi:schemaLocation=" <beanid="connf"class="org.apache.activemq.ActiveMQConnectionFactory"> <propertyname="brokerURL"value="tcp://localhost:61616"></property> </bean> <beanid="mydest"class="org.apache.activemq.command.ActiveMQQueue"> <constructor-argindex="0"value="test.queue"></constructor-arg> </bean> <beanid="jmsTemplate"class="org.springframework.jms.core.JmsTemplate"> <propertyname="connectionFactory"ref="connf"></property> <propertyname="defaultDestination"ref="mydest"></property> </bean> </beans>
❻ activemq 一台服务器如何配置多个broker
步骤如下:
1、把整个conf文件夹复制一份,比如叫conf2
2、修改里面的activemq.xml文件
①brokerName不能和原来的重复
②数据存放的文件名称不能重复,比如<kahaDB directory = "${activemq.data}/kahadb2"/>
③所有涉及的transportConnector的端口,都要和原来的不一样。注意不要超出端口的范围(0-65535)
3、修改jetty.xml,把里面的默认端口号8161改成别的,不如9161
4、到bin下面,复制一个activemq,比如叫activemq2
①修改程序的id,不能和原来的重复,ACTIVEMQ_PIDFILE="$ACTIVEMQ_DATA/activemq2.pid"
②修改配置文件路径ACTIVEMQ_CONF="$ACTIVEMQ_BASE/conf2"
③修改端口,tcp://localhost:61616把61616改成和activemq.xml里面的tcp端口一致。请注意,在activemq5.9.0版本中是这么修改。但我使用的是最新的5.12.1版本,在activemq中找不到该tcp端口的配置,折腾了半天才发现该版本把这个配置挪到了env文件。所以就需要拷贝一份env,比如就叫env2吧,然后再env2里面把61616改成和activemq.xml里面的tcp端口一致。最后别忘了把activemq2里面对env的引用改成env2。ACTIVEMQ_CONFIGS="/etc/default/activemq $HOME/.activemqrc $ACTIVEMQ_HOME/bin/env2"
现在你可以到activemq的bin目录下分别执行./activemq start 和 ./activemq2 start 了。这两个broker服务应该能正常启动了。
❼ 集群时activemq 怎么配置
主要是设置JAVA的环境变量就可以了(JAVA_HOME和CLASSPATH)。 如果是ActiveMQ 5.5.0的话,直接运行就可以了
❽ ActiveMQ之Destination
Wildcard用来支持名字分层体系,它不是JMS规范的一部分,是ActiveMQ的扩展。
ActiveMQ支持以下三种wildcard:
示例,假设有两个Destination:PRICE.STOCK.NASDAQ.IBM 和 PRICE.STOCK.NYSE.SUNW。那么如下配置通配符:
路径符号替换,将“/”替换”.”,添加如下插件:
组合队列Composite Destinations 允许用一个虚拟的destination代表多个destinations,这样就可以通过composite destinations在一个操作中同时向多个queue/topic发送消息。 有两种实现方式:
在创建客户端连接的Destination时,多个destination之间采用”,”分隔。如下:
如果希望不同的Destination的话,需要加前缀“queue://”或者“topic://”。如下
客户端发送示例:
当客户端向“comQueue”发送消息时,消息就会同时发送到”queue.FOO”和“topic.FOO”中。
通过配置selecter来过滤掉不需要的消息,如下:
在启动ActiveMQ的时候如果需要创建Destination的话,可以在activemq.xml中配置:
在ActiveMQ的queue在不使用之后,可以通过web控制台或者JMX方式来删除掉,当然,也可以通过配置,使得broker可以自动探测到无用的队列并删除掉,回收相应资源。
参数说明:
:设置多长时间检查一次,单位是毫秒。 inactiveTimoutBeforeGC : 设置当Destination为空后,多长时间被删除,单位是毫秒。 gcInactiveDestinations :设置删除掉不活动的队列,默认为false。
Destination Options是一种无需扩展JMS API即可向JMS消费者提供扩展配置选项的方法。这些选项使用URL查询语法在创建消费者的目标名称中进行编码。
消费者选项如下:
虚拟destination用来创建逻辑destination,客户端可以通过它来生产和消费消息,它会把消息映射到物理destination。
ActiveMQ支持2种方式:
ActiveMQ中,topic只有在持久订阅下才会持久化消息。JMS持久化订阅者 MessageConsumer 在创建时会生成一个 唯一的 JMS clientID 和一个持久化订阅者的name。 为了符合JMS,对于一个JMSclientID,同一时间,只能有一个活跃的JMS连接,并且,对于一个clientID和订阅者name而言,只有一个消费者可以是活跃的。也就是说,对于给定的topic订阅者来说,只能由一个活跃的进程进行消费。这意味着我们不能实现:
如今,JMS中的队列语义提供了通过多个消费者来实现可靠的负载均衡——允许多线程,进程和机器来处理消息。然后我们就有了成熟而复杂的负载均衡技术,就像Messge Groups一样在维护订单时进行负载均衡和并行化处理。如下图所示,全量的消息先发送到队列,然后再分发给消费者,通过队列来解决负载均衡和故障转移问题。
virtual topic背后的思想是生产者用正常的JMS方式把消息发送到一个topic。消费者可以继续使用JMS标准中的Topic语义。然而,如果 topic 是虚拟的, 订阅一个逻辑topic的消费者可以从一个真实队列中消费,允许多个消费者分布在多个机器上且多线程的进行负载均衡。 例如,假定我们现在有一个叫做 VirtualTopic.Orders 的topic。(前缀 VirtualTopic. 表明这是一个 virtual topic)。
我们希望将orders 发送到系统A 和 系统B。于是,用通常的 rable topics ,我们需要为 clientID_A 和 “A” 创建一个JMS消费者,同时为 clientID_B 和 “B”创建一个JMS消费者。 有了virtual topics 我们可以直接从队列 Consumer.A.VirtualTopic.Orders 中为系统A 消费,或者从队列 Consumer.B.VirtualTopic.Orders 中为系统B 消费。
默认前缀是: VirtualTopic.>
自定义消费虚拟地址默认格式: Consumer. .VirtualTopic.>*
下面的示例演示如何使所有主题成为虚拟主题。下面的示例使用名称“>“”表示“匹配所有主题”,“VirtualTopicConsumers”为消费队列的前缀。
其他的配置参数:
通常情况下,使用网络连接消费者队列。在这种情况下,不要在虚拟主题上桥接任何普通主题消费者,因为任何转发的消息都会再次分散到网络代理上的消费者队列,从而导致消息重复。下面示例展示了如何排除虚拟队列:
ActiveMQ中每个queue中的消息只能被一个consumer消费。然而,有时候你可能希望能够监视生产者和消费者之间的消息流。你可以通过使用Virtual Destinations 来建立一个virtual queue 来把消息转发到多个queues中。但是 为系统中每个queue都进行如此的配置可能会很麻烦。 使用ActiveMQ支持Mirrored Queues。Broker会把发送到某个queue的所有消息转发到一个名称类似的topic,因此监控程序只需要订阅这个mirrored queue topic。为了启用Mirrored Queues,首先要将BrokerService的“useMirroredQueues“属性设置成true,然后可以通过destinationInterceptors设置其它属性,如mirror topic的前缀,缺省是“VirtualTopic.Mirror.”。如下订阅“*.qmirror”的主题就开启了mirrored queue。
http://activemq.apache.org/features
❾ 关于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可以起到分摊数据和缓冲的作用。 在之前的随笔中,已经介绍过MSMQ,现在先介绍一下ActiveMQ一些配置,目前好像ActiveMQ配置上的介绍还比较少。以下是自己总结一些相关资料,贴出来给大家共享 一)问题分析和解决1)KahaDb和AMQ Message Store两种持久方式如何选择?官方:From 5.3 onwards – we recommend you use KahaDB – which offers improved scalability and recoverability over the AMQ Message Store.The AMQ Message Store which although faster than KahaDB – does not scales as well as KahaDB and recovery times take longer. 非官方:kaha文件系统实际上上是一个文件索引系统,有两部分组成,一个是数据文件系统,由一个个独立的文件组成,缺省文件大小是32M大(可配置),另外一个是索引文件系统,记录消息在数据文件中的位置信息以及数据文件中的空闲块信息。数据文件是存储到硬盘上的,索引文件是缓存在内存中的。所以这个存储系统对大消息存储有利,象我们的memberId之类的文本消息,实际上是浪费,索引比消息还大,哈。 我方分析:推荐: Amq持久方式理由:虽然官方推荐使用KahaDB持久方式,但其提到的优势:可伸缩性和恢复性较好,对于我们实际的应用意义不大。从我们自己的使用经验来看,KahaDB持久方式,Data文件是一个大文件(感觉文件过大后,造成队列服务瘫死的可能性会增大),从官网的相关配置(附录1)也找不到哪里可以设置数据的文件的最大Size。)而Amq持久方式可以设置Data文件最大Size,这样可以保证即时消息积压很多,Data文件也不至于过大。 2)错误:Channel was inactive for too long解决方法:在建立连接的Uri中加入: wireFormat.maxInactivityDuration=0 参考资源:http://jinguo.iteye.com/blog/243153 You can do the following to fix the issues:1) Append max inactivity ration to your Uri in the format below: wireFormat.maxInactivityDuration=02) Use the same Uri at the client side as well as at the server sideRegards, 如果不这样设置,对应的错误会出现:2008-05-07 09:22:56,343 [org.apache.activemq.ActiveMQConnection]-[WARN] Async exception with no exception listener: org.apache.activemq.transport.InactivityIOException: Channel was inactive for too long: localhost/127.0.0.1:61616org.apache.activemq.transport.InactivityIOException: Channel was inactive for too long: localhost/127.0.0.1:61616ActiveMQ的tcp url:tcp://localhost:61616后面要加入?wireFormat.maxInactivityDuration=0 这样的参数,否则当一段时间没有消息发送时会抛出 "Channel was inactive for too long"异常3)错误:Wire format negotiation timeout: peer did not send his wire format.解决方法:1)关闭ActiveMqLog4j打开:conf/log4j.properties将:log4j.rootLogger=INFO, console, logfile修改为:log4j.rootLogger=OFF 2)在建立连接的Uri中加入: =30000 例如北京的测试环境连接Uri:tcp://192.168.199.80:61616?wireFormat.maxInactivityDuration=0&=30000&connection.AsyncSend=true 参考资源:http://activemq.apache.org/javaxjmsjmsexception-wire-format-negociation-timeout-peer-did-not-send-his-wire-format.html If you get exception like this,it can mean one of three things:1. You're connecting to the port not used by ActiveMQ TCP transportMake sure to check that you're connecting to the appropriate host:port 2. You're using log4j JMS appender and doesn't filter out ActiveMQ log messagesBe sure to read How do I use log4j JMS appender with ActiveMQ and more importantly to never send ActiveMQ log messages to JMS appender 3. Your broker is probably under heavy load (or network connection is unreliable), so connection setup cannot be completed in a reasonable timeIf you experience sporadic exceptions like this, the best solution is to use failover transport, so that your clients can try connecting again if the first attempt fails. If you're getting these kind of exceptions more frequently you can also try extending wire format negotiation period (default 10 sec). You can do that by using wireFormat. property on the connection URL in your client.For exampletcp://localhost:61616?wireFormat.=30000will use 30 sec timeout.(貌似有问题!!!) 4)错误:Out of memory解决方法:1) 设置Java最大内存限制为合适大小:Bin/activemq.bat 中ACTIVEMQ_OPTS=-Xmx512M(默认是512)2)Activemq.xml配置节:systemUsage/ systemUsage配置大小合适,并且特别注意:大于所有rable desitination设置的memoryUsage之和。 备注:1)尖括号:“>”代表通配符2)ACTIVEMQ_OPTS的配置〉=memoryUsage中配置〉=所有rable desitination设置之和 3)SystemUsage配置设置了一些系统内存和硬盘容量,当系统消耗超过这些容量设置时,amq会“slow down procer”,还是很重要的。 参考资料:http://m.oschina.net/blog/26216参考– http://activemq.apache.org/javalangoutofmemory.html 对于MQ的内容实用是可管理和可配置的。首先需要判断的是MQ的哪部分系统因内存不足而导致泄漏,是JVM,broker还是消费者、生产者? 一、内存管理 JVM内存管理: 1. 用bin/activemq命令在独立JVM中运行broker。用-Xmx和-Xss命令即可(activemq.bat文件中修改ACTIVEMQ_OPTS选项参数即可); 2. 默认情况下,MQ用512M的JVM; broker内存管理: 1. broker使用的内存并不是由JVM的内存决定的。虽然受到JVM的限制,但broker确实独立管理器内存; 2. systemUsage和destination的内存限制与broker内存息息相关; 3. MQ中内存的关系是:JVM->Broker->broker features; 4. 所有destination的内存总量不能超过broker的总内存; 消费者: 1. 由于消息大小可以配置,prefetch limit往往是导致内存溢出的主要原因; 2. 减少prefetch limit的大小,会减少消费者内存中存储的消息数量; 生产者: 1. 除非消息数量超过了broker资源的限制,否则生产者不会导致内存溢出; 2. 当内存溢出后,生产者会收到broker的阻塞信息提示; 二、其他 将消息缓冲之硬盘: 1. 只有当消息在内存中存储时,才允许消息的快速匹配与分发,而当消费者很慢或者离开时,内存可能会耗尽; 2. 当destination到达它的内存临界值时,broker会用消息游标来缓存非持久化的消息到硬盘。 3. 临界值在broker中通过memoryUsage和systemUsage两个属性配置,请参考activemq.xml; 4. 对于缓慢的消费者,当尚未耗尽内存或者转变为生产者并发控制模式前,这个特性允许生产者继续发送消息到broker; 5. 当有多个destination的时候,默认的内存临界值可能被打破,而这种情况将消息缓存到硬盘就显得很有意义; 6. precentUsage配置:使用百分比来控制内存使用情况; 多个线程: 1. 默认情况下,MQ每个destination都对应唯一的线程; 2. -Dorg.apache.activema.UseDedicatedTaskRunner=false(activemq.bat文件中修改ACTIVEMQ_OPTS选项参数即可),用线程池来限制线程的数量,从而减少内存消耗; 大数据传输: 1. destination policies–maxPageSize:控制进入内存中的消息数量;lazyDispatch:增加控制使用当前消费者列表的预取值; 2. 使用blogMessage或者streamsMessage类型来进行大量文件的传输; 泄漏JMS资源: 1. 当session或者procer或者consumer大量存在而没有关闭的时候; 2. 使用PooledConnectionFactory;
❿ c++ activemq start失败
原因及解决方法:1、主机hostname有非法字符修改主机hostname的时候,不小心写入了非法字符,如下划线“_”,导致服务启动失败。解决:修改hostname就可以了。修改hostname的方法:1、方法一hostnamectl命令修改,不需要重启新开一个窗口就生效。语法: hostnamectl set-hostname 新主机名。2、方法二:修改配置文件 /etc/hostname 保存退出。修改完成之后需要重启生效。3、方法三:临时修改主机名。hostname 新主机名。hostname命名规则可参考:https://en.wikipedia.org/wiki/Hostname2、配置文件IP配置不正确。配置文件conf/activemq.xml文件IP配置不正确,activemq启动失败。解决:IP修改正确就好了。不过网上也帖子提到关于“Cannot assign requested address”报错的其他原因和解决方法:1、/etc/hosts解析异常,不能解析本机IP,需手动添加 127.0.0.1 localhost。2、/etc/hosts文件权限异常,修改为644。