我正在使用apache-activemq-5.11.1,这是在JDK 7(主要版本51.0)上运行的稳定版本,我使用的是JDK 7 Update 80.如果我在JDK 6上运行相同,我会遇到错误。
线程中的异常" main" java.lang.UnsupportedClassVersionError:org / apache / ac tivemq / console / Main:不支持的major.minor版本51.0
来我的问题我需要在我的系统中运行两个ActiveMQ实例。我按照以下步骤创建了两个实例。
C:\>cd \apache-activemq-5.11.1
C:\apache-activemq-5.11.1>.\bin\activemq create instance1
C:\apache-activemq-5.11.1>.\bin\activemq create instance2
我已经更改为 instance2 的不同端口号集,如下所示,
<!--EDITED: apache-activemq-5.11.1\instance2\conf\activemq.xml-->
<transportConnectors>
<!-- DOS protection, limit concurrent connections to 1000 and frame size to 100MB -->
<transportConnector name="openwire" uri="tcp://0.0.0.0:61716?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
<transportConnector name="amqp" uri="amqp://0.0.0.0:5772?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
<transportConnector name="stomp" uri="stomp://0.0.0.0:61713?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
<transportConnector name="mqtt" uri="mqtt://0.0.0.0:1983?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
<transportConnector name="ws" uri="ws://0.0.0.0:61714?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
</transportConnectors>
现在我正在启动instance1&amp; instance2如下.....
C:\apache-activemq-5.11.1\instance1\bin>instance1 start
C:\apache-activemq-5.11.1\instance1\bin>instance2 start
其中我试图启动的第二个实例给出了以下kahadb锁定问题.....
INFO | Refreshing org.apache.activemq.xbean.XBeanBrokerFactory$1@7209d9af: startup date [Thu May 07 16:16:23 IST 2015]; root of context hierarchy
INFO | PListStore:[C:\apache-activemq-5.11.1\data\localhost\tmp_storage] started
INFO | Using Persistence Adapter: KahaDBPersistenceAdapter[C:\apache-activemq-5.11.1\data\kahadb]
INFO | Database C:\apache-activemq-5.11.1\data\kahadb\lock is locked... waiting 10 seconds for the database to be unlocked. Reason: java.io.IOException: File 'C:\apache-activemq-5.11.1\data\kahadb\lock' could not be locked.
请为此数据库锁定问题提供解决方案。
答案 0 :(得分:5)
制作ActiveMQ的副本,例如apache-activemq-x.xx.x
到apache-activemq-x.xx.x_2
更改apache-activemq-x.xx.x_2\conf\activemq.xml
的端口。确保您要更改的端口号没有冲突。
<!--EDIT: apache-activemq-5.11.1_2\conf\activemq.xml-->
<transportConnectors>
<!-- DOS protection, limit concurrent connections to 1000 and frame size to 100MB -->
<transportConnector name="openwire" uri="tcp://0.0.0.0:61716?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
<transportConnector name="amqp" uri="amqp://0.0.0.0:5772?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
<transportConnector name="stomp" uri="stomp://0.0.0.0:61713?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
<transportConnector name="mqtt" uri="mqtt://0.0.0.0:1983?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
<transportConnector name="ws" uri="ws://0.0.0.0:61714?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
</transportConnectors>
随着端口更改,我们还必须更正jetty.xml http管理控制台端口。
<bean id="jettyPort" class="org.apache.activemq.web.WebConsolePort" init-method="start">
<!-- the default port number for the web console -->
<property name="host" value="0.0.0.0"/>
<property name="port" value="8162"/>
</bean>
通过这种方式,您可以在一个系统中运行两个ActiveMQ服务。
答案 1 :(得分:2)
为ActiveMQ运行更多实例会提供“故障转移”选项。
这样一个实例出于某种原因出现故障。另一个实例自动出现,因为锁定KahaDB的第一个实例已经发布。
因为我们正在配置故障转移模式的实例,所以不要更改这些端口。
C:\>cd \apache-activemq-5.11.1
C:\apache-activemq-5.11.1>.\bin\activemq create instance1
C:\apache-activemq-5.11.1>.\bin\activemq create instance2
请在不更改任何配置的情况下启动实例。因此,当instance1因任何原因而关闭时,instance2即将出现。
C:\apache-activemq-5.11.1\instance1\bin>instance1 start
C:\apache-activemq-5.11.1\instance2\bin>instance2 start
我希望这必须是在ActiveMQ下创建多个实例的目的。而且还有更多的tweaky配置。也适用于Kahadb。
答案 2 :(得分:1)
正在发生的事情是您已正确更改了端口号,但您创建的实例都使用相同的数据库(在本例中为文件系统KahaDB)来存储其消息,
因此,当一个实例启动并运行时,它将保留该数据库的锁定,而activeMQ的其他实例将等待获取此数据库的锁定。 从本质上讲,这将成为主从配置。
查看activeMQ.xml中的这一行
<persistenceAdapter>
<kahaDB directory="${activemq.data}/kahadb"/>
</persistenceAdapter>
这将指向两个实例的相同位置。
我的解决方案是将整个文件夹apache-activemq-x.xx.x
复制到不同位置,更改第二个实例的端口号并以不同方式运行它们
通过这个,您将在同一台机器上运行2个activeMQ实例
希望这有帮助!
祝你好运!答案 3 :(得分:1)
我确实做过以下指示:
适用于Mac
(未在Linux
中测试)
注意:必须通过instanceNumber start
启动实例(控制台参数/参数不再有效)。
我对kahadb
的{{1}}锁定 ,Windows
5.13.3 和< em> 5.14.5 版本
DZone的同一位作者在他的博客中写了几乎相同的帖子
但存在重要更新。
您必须为每个ActiveMQ
目录中的每个实例打开每个instanceNumber.bat
文件,并添加以下两行:
bin
set ACTIVEMQ_CONF="ACTIVEMQ_HOME/instanceNumber/conf"
set ACTIVEMQ_DATA="ACTIVEMQ_HOME/instanceNumber/data"
表示ACTIVEMQ_HOME
和ActiveMQ
的路径位置的位置是正在编辑的实例,例如:instanceNumber
和instanceA
答案 4 :(得分:-1)
虽然由于KahaDB
限制,负载均衡/容错配置受到限制。我们可以使用以下类型的连接URL来利用ActiveMQ加载....
failover://(tcp://192.nnn.nn.nn:61616,tcp://192.nnn.nn.nn:61616)?randomize=false
randomize=true
将在活动模式下的两个AciveMQ之间进行消息改组,而不仅仅是通过ActiveMQ的故障转移......
可以在以下Apache站点链接....
下找到完整的参考资料http://activemq.apache.org/failover-transport-reference.html
但是仍然高可用性(即集群)配置使您的应用程序稳定,尽管Apache必须提升ActiveMQ高可用性,因此事情可以更顺畅。
目前的Apache ActiveMQ高可用性配置可在以下链接中找到。
http://activemq.apache.org/clustering.html
虽然KahaDB
有文件锁定限制,但可以在调整/替换配置方式后进行...
1)共享文件系统主从, - 共享文件系统,如SAN http://activemq.apache.org/shared-file-system-master-slave.html
2)JDBC Master Slave, - 共享数据库 http://activemq.apache.org/jdbc-master-slave.html
3)复制的LevelDB商店, - ZooKeeper服务器 http://activemq.apache.org/replicated-leveldb-store.html
Over&amp;以上通过使用JCA连接器, - 如JBoss,Weblogic,Websphere,Geronimo,Glassfish, - 可以完成ActimeMQ修补作为一种资源适配器。而使用Apache Camel(karaf),JBoss Fuse ESB等产品HA&amp;可以完成ActiveMQ的聚类。