ActiveMQ SERVER 配置
1.1 设置Broker名字
<broker xmlns="
http://activemq.apache.org/schema/core
" brokerName="stu_activemq5.9" dataDirectory="${activemq.data}">
</broker>
1.2 ActiveMQ admin用户名及密码设置
ActiveMQ默认使用的是jetty服务器
打开:
activemq-5.9.0\conf\jetty-realm.properties
用户名:密码,角色名
admin: admin, admin
user: user, user
1.3 设置persistenceAdapter 持久化方式
<persistenceAdapter>
<!--kahaDB directory="${activemq.data}/kahadb"/-->
<jdbcPersistenceAdapter dataSource="#oracle-ds" directory="${activemq.data}/oraclePersistence" createTablesOnStartup="false" />
</persistenceAdapter>
在broker外添加
<bean id="oracle-ds" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
<property name="url" value="jdbc:oracle:thin:@192.168.30.21:1521:dbName"/>
<property name="username" value="username"/>
<property name="password" value="password"/>
<property name="maxActive" value="200"/>
<property name="poolPreparedStatements" value="true"/>
</bean>
1.4 设置networkConnectors 连接其他的broker
<!-- defined network Adapter connection other broker -->
<networkConnectors>
<networkConnector uri="static:(tcp://remotehost:61616)" />
</networkConnectors>
客户端配置
默认配置,使用随机选择Broker算法
failover:(tcp://localhost:61616,tcp://remotehost:61616)
关闭随机选择,优先选择第一个配置的Broker,只有之前的Broker不可用,再选择后面Broker:
failover:(tcp://localhost:61616,tcp://remotehost:61616)?randomize=false"
<networkConnectors>
<networkConnector name="default-nc" uri="multicast://default"/>
</networkConnectors>
<transportConnectors>
<transportConnector name="openwire" uri="tcp://localhost:61616" discoveryUri="multicast://default"/>
</transportConnectors>
在networkConnectors节点中配置multicast协议,用于寻找其他支持multicast的服务器。在transportConnector节点配置discoveryUri,声明服务器本身支持multicast协议。
广播自动发现服务器,适合于经常动态增减服务器的情况。优点是增减服务器,不需要为每个其他服务器节点修改配置。缺点是服务自动发现,缺少配置文件,对调试有影响。
另外需要注意的是,由于广播功能,经常产生大量的消息传输,所以很多情况下运维是关掉这个服务的。使用Multicast Connector前要确保这个服务是开启的。
客户端的Discover Protocol:和Failover Protocol差不多,只不过是动态发现服务。
配置如下:
discovery:(multicast://default)
这样客户端会自动连接广播的url在multicast://default的服务器。
1.5 设置 transportConnectors 支持的协议
<transportConnectors>
<!-- DOS protection, limit concurrent connections to 1000 and frame size to 100MB -->
<transportConnector name="openwire" uri="tcp://localhost:61616?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
<transportConnector name="amqp" uri="amqp://0.0.0.0:5672?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
<transportConnector name="stomp" uri="stomp://0.0.0.0:61613?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
<transportConnector name="mqtt" uri="mqtt://0.0.0.0:1883?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
<transportConnector name="ws" uri="ws://0.0.0.0:61614?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
</transportConnectors>
1.6 设置destinationPolicy分发策略
<!--这里使用了wildcards,表示所有以EUCITA开头的topic-->
<policyEntry topic="EUCITA.>"producerFlowControl="false"memoryLimit="10mb">
<!--分发策略-->
<dispatchPolicy>
<!--按顺序分发-->
<strictOrderDispatchPolicy/>
</dispatchPolicy>
<!--恢复策略-->
<subscriptionRecoveryPolicy>
<!--只恢复最后一个message-->
<lastImageSubscriptionRecoveryPolicy/>
</subscriptionRecoveryPolicy>
</policyEntry>
DispathPolicy
ActiveMQ支持3中不同的分发策略
<roundRobinDispatchPolicy>:Simple dispatch policy that sends a message to every subscription that matches the message.
<simpleDispatchPolicy>:Simple dispatch policy that sends a message to every subscription that matches the message.
<strictOrderDispatchPolicy>:Dispatch policy that causes every subscription to see messages in the same order.
SubscriptionRecoveryPolicy
ActiveMQ支持6种恢复策略,可以自行选择使用不同的策略
<fixedCountSubscriptionRecoveryPolicy>: keep a fixed count of last messages.
<fixedSizedSubscriptionRecoveryPolicy>: keep a fixed amount of memory available in RAM for message history which is evicted in time order.
<lastImageSubscriptionRecoveryPolicy>:only keep the last message.
<noSubscriptionRecoveryPolicy>:disable recovery of messages.
<queryBasedSubscriptionRecoveryPolicy>:perform a user specific query mechanism to load any messages they may have missed.
<timedSubscriptionRecoveryPolicy>:keep a timed buffer of messages around in memory and use that to recover new subscriptions.
1.7 ActiveMQ启动时报锁定数据库的问题解决
activemq database lock driver override not found
原因是:activeMQ的broker在启动时会锁定数据库。我们每个人在调试时,自己的运行环境中就会运行一个broker,所以会出现争用锁的现象(如果只有一个人运行则不会出现这样的问题),报错如下:
2012-06-27 15:12:32 org.apache.activemq.store.jdbc.JDBCPersistenceAdapter INFO D
atabase lock driver override not found for : [mysql-ab_jdbc_driver]. Will use d
efault implementation.
2012-06-27 15:12:32 org.apache.activemq.store.jdbc.DefaultDatabaseLocker INFO At
tempting to acquire the exclusive lock to become the Master broker
2012-06-27 15:13:23 org.apache.activemq.store.jdbc.DefaultDatabaseLocker INFO Fa
iled to acquire lock. Sleeping for 1000 milli(s) before trying again...
处理办法:在config的activemq.xml中,修改jdbcPersistenceAdapter选项,添加一个:useDatabaseLock="false",结果如下:
<jdbcPersistenceAdapter dataSource="#dataSource" useDatabaseLock="false"/>
参考资料:
AMQ 简介与配置
http://www.cnblogs.com/kgdxpr/p/3381974.html
ActiveMQ持久化方式
http://www.open-open.com/lib/view/open1371822097588.html
AMQ Network connectors
http://blog.csdn.net/xiajun07061225/article/details/47068451
AMQ 多服务器通信*
http://m.oschina.net/blog/286454
分发策略
http://www.data321.com/fbc03758.html
http://www.tuicool.com/articles/fy6Nviz
协议
http://blog.sina.com.cn/s/blog_616e189f0100nuyn.html
MQTT CLIENT详解
http://blog.itpub.net/28624388/viewspace-1177012/