ActiveMQ上线注意事项(优化+安全)
1.配置web管理页面的安全认证
默认的web页面用户名密码admin:admin,非常不安全,
编辑jetty-realm.properties文件,(用户:密码,组)
admin: admin123, admin
user: user123, user
2. JVM优化
vim /bin/activemq
ACTIVEMQ_OPTS_MEMORY="-Xms1024M -Xmx1024M -XX:PermSize=256M -XX:MaxPermSize=384M"
官方参考文档
修改内存
linux下,修改bin/env的ACTIVEMQ_OPTS_MEMORY属性,Xms=最小内存,Xmx=最大内存
ACTIVEMQ_OPTS_MEMORY="-Xms64M -Xmx1G"
3.目标策略优化
在节点destinationPolicy配置策略,可以对单个或者所有的主题和队列进行设置,使用流量监控,当消息达到memoryLimit的时候,ActiveMQ会减慢消息的产生甚至阻塞,destinationPolicy的配置如下:
<destinationPolicy>
<policyMap>
<policyEntries>
<policyEntry topic=">" producerFlowControl="true" memoryLimit="1mb" >
<pendingMessageLimitStrategy>
<constantPendingMessageLimitStrategy limit="1000"/>
</pendingMessageLimitStrategy>
<policyEntry queue=">" producerFlowControl="true" memoryLimit="1mb" >
</policyEntry>
</policyEntries>
</policyMap>
</destinationPolicy>
4.存储设置
memoryUsage表示ActiveMQ使用的内存,这个值要大于等于destinationPolicy中设置的所有队列的内存之和。
storeUsage表示持久化存储文件的大小。
tempUsage表示非持久化消息存储的临时内存大小
<systemUsage>
<systemUsage>
<memoryUsage>
<memoryUsage percentOfJvmHeap="70" limit="50 mb"/>
</memoryUsage>
<storeUsage>
<storeUsage limit="100 gb"/>
</storeUsage>
<tempUsage>
<tempUsage limit="50 gb"/>
</tempUsage>
</systemUsage>
</systemUsage>
5.配置NIO传输连接器
<broker> <transportConnectors> <transportConnector name="nio" uri="nio://localhost:61616"/> </<transportConnectors> </broker>
除了为每个连接使用一个线程的阻塞IO,ActiveMQ还可以为每一个客户端连接使用一个消息分发线程.你可以通过将系统参数org.apache.activemq.UseDedicatedTaskRunner设置为false
来设置ActiveMQ使用一个搞线程池.下面是一个示例: ACTIVEMQ_OPTS="-Dorg.apache.activemq.UseDedicatedTaskRunner=false" 确保ActiveMQ代理用于足够的内存来处理大量的并发连接,
需要分两步进行: 首先,你需要确保运行ActiveMQ的JVM在启动之前已经配置了足够的内存.可以使用 JVM的-Xmx选项来配置,如下所示:
ACTIVEMQ_OPTS="-Xmx1024M -Dorg.apache.activemq.UseDedicatedTaskRunner=false"
6.配置MQ连接的安全认证
编辑activemq.xml,在<broker>下加
<plugins>
<simpleAuthenticationPlugin>
<users>
<authenticationUser username="user" password="user123" groups="users" />
</users>
</simpleAuthenticationPlugin>
</plugins>
7.禁用不使用的连接协议
编辑activemq.xml,在<transportConnectors>中注销或删除不使用的<transportConnector>
<transportConnectors>
<!-- DOS protection, limit concurrent connections to 1000 and frame size to 100MB -->
<transportConnector name="openwire" uri="tcp://0.0.0.0: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>
8.使用MySql作为持久化保存
编辑activemq.xml,在<beans>下插入如下bean配置
<bean id="mysql-ds" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://192.168.0.20/activemq?relaxAutoCommit=true" />
<property name="username" value="activemq" />
<property name="password" value="123456" />
<property name="poolPreparedStatements" value="true" />
</bean>
删除或注销掉<persistenceAdapter>下的<kahaD>,添加<jdbcPersistenceAdapter>
<persistenceAdapter>
<!--<kahaDB directory="${activemq.data}/kahadb"/>-->
<jdbcPersistenceAdapter dataDirectory="activemq-data" dataSource="#mysql-ds"/>
</persistenceAdapter>
9.将MQ添加到服务,并设置开机自启动;
运行以下命令注册为service,并设置为开机自动启动
ln -snf bin/activemq /etc/init.d/activemq
chkconfig --add activemq
chkconfig activemq on
然后就可以使用如下service命令了
service activemq start|stop|status|restart
10.ActiveMQ默认绑定本地端口61616,如果一切顺利,启动ActiveMQ成功后,可以执行命令:
netstat -an|find "61616"