ActiveMQ是一个独立的jms provider.
1. 设置 ActiveMQ 占用内存的大小:
windows 环境下 Bin/activemq.bat 文件 linux环境中 activemq sh文件中 修改 ACTIVEMQ_OPTS 属性。
2. 配置目标对象占用的内存大小(conf/activemq.xml 文件中):
<destinationPolicy>
<policyMap>
<policyEntries>
<policyEntry topic=">" producerFlowControl="true" memoryLimit="1mb">
<pendingSubscriberPolicy>
<vmCursor/>
</pendingSubscriberPolicy>
</policyEntry>
<policyEntry queue=">" producerFlowControl="true" memoryLimit="1mb">
<!-- Use VM cursor for better latency
For more information, see:
http://activemq.apache.org/message-cursors.html
<pendingQueuePolicy>
<vmQueueCursor/>
</pendingQueuePolicy>
-->
</policyEntry>
</policyEntries>
</policyMap>
</destinationPolicy>
activemq可以针对 每个queue进行单独设置,这里“>”是通配符,表示所有queue,具体到生产环境中,需要 针对每个queue进行设置。 这里memoryLimit="1mb"表示queue的内存限制为1M,producerFlowControl="false"表示关闭流量控 制,如果不关闭流量控制,在消息量发生累积时,amq会主动控制流量,减少消息的生产。
3. 设置所有队列占用的总内存大小(conf/activemq.xml 文件中):
<systemUsage sendFailIfNoSpaceAfterTimeout="3000" sendFailIfNoSpace="true">
<systemUsage>
<memoryUsage>
<memoryUsage limit="20 mb"/>
</memoryUsage>
<storeUsage>
<storeUsage limit="1 gb"/>
</storeUsage>
<tempUsage>
<tempUsage limit="100 mb"/>
</tempUsage>
</systemUsage>
</systemUsage>
memoryUsage:表示所有队列对象占用的内存大小为20mb;
4. ActiveMQ 链接mysql(conf/activemq.xml 文件中)
首先,将mysql 驱动包 扔到 activemq 安装文件的 lib 下.
在 activemq.xml 文件中 添加:
<bean id="MySQL-DS" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://127.0.0.1:3306/misc? 数据库名称 useUnicode=true&characterEncoding=UTF-8" />
<property name="username" value="root" /> 数据库用户名
<property name="password" value="admin" /> 密码
<property name="poolPreparedStatements" value="true" />
</bean>
找到 :
<persistenceAdapter>
<kahaDB directory="${activemq.data}/kahadb"/>
</persistenceAdapter>
注释掉。
添加: <persistenceAdapter>
<jdbcPersistenceAdapter dataSource="#MySQL-DS"/>
</persistenceAdapter>
重现启动activemq。 在启动时 他会找到 misc 数据库,并执行创表脚本,生成相应的数据库表.