activemq 记录

1. 集群
集群:主要是用来错误转发和负载均衡。不过如果服务器里面有没有消费掉的消息,这时候如果服务器down了机,那没有消费掉的消息只能是等服务器好了之后才能继续被消费。
这个问题的解决方案是用master/slave的模式。(但这个性能上很大影响。Master要恢复也是要把slave停了才可以恢复的。)
集群分两种:
Failover:这种是用来解决如果一个服务器down了,马上可以切换到另一台服务器。
Network: 这种是用来解决一个服务器生产的东西,可以在另一个服务器去消费。

2. Queue顺序
Queue中的消息是按照顺序被分发到consumers的。然而,当你有多个consumers同时从相同的queue中提取消息时,你将失去这个保证。因为这些消息是被多个线程并发的处理。
所以一个queue固定一个消费者来保证顺序。

3. 监控
用的是JMX
可以通过RemoteJMXBrokerFacade来得到BrokerViewMBean:
如:
public static void main(String[] args) {
RemoteJMXBrokerFacade createConnector = new RemoteJMXBrokerFacade();

System.setProperty("webconsole.jmx.url", "service:jmx:rmi:///jndi/rmi://10.200.48.49:1099/jmxrmi");
//System.setProperty("webconsole.jmx.user","controlRole");
// System.setProperty("webconsole.jmx.password","abcd1234");
SystemPropertiesConfiguration configuration = new SystemPropertiesConfiguration();
createConnector.setConfiguration(configuration);
try {
BrokerViewMBean brokerAdmin = createConnector.getBrokerAdmin();
System.out.println(brokerAdmin.getBrokerName());

} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

4. Activemq.xml简单说明。
4.1 配置连接用户名和密码:
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<value>file:${activemq.base}/conf/credentials.properties</value>
</property>
</bean>
这个是配置用户名和密码的配置上,这里只是说明用户名和密码,没有应用,应用要这样写。
<!--在Broker中,配置插件-->
<plugins>
<simpleAuthenticationPlugin>
<users>
<authenticationUser username="${activemq.username}" password="${activemq.password}" groups="users,admins"/>
</users>
</simpleAuthenticationPlugin>
</plugins>

应用用户名和密码后
Java代码
ConnectionFactory cf = new ActiveMQConnectionFactory("username", "password", "tcp://195.2.199.169:61616")


4.2 系统持久化空间的配置
4.2.1 desitination配置:
1.memorylimit:内存限制,当消息发生累积到限制的数值时,amq会主动控制流量,停止消息的生产
2.producerFlowControl="false":关闭流量控制
建议生产环境下应该打开流量控制开关,以避免生成端占用大部分io能力,阻塞消息端的情况
<policyEntry queue=">" memoryLimit="100mb" producerFlowControl="false"/>


4.2.2存储配置:
amq可以使用文件系统或者数据库存储累积的消息,文件系统存储使用的是其自有的kaha存储系统,
数据库可以使用内嵌的Derby或者mysql,oracle

persistenceAdapter文件系统配置
1.indexBinSize:索引文件缓存页面数,缺省为1024,当amq扩充或者缩减存储时,会锁定整个
broker,导致一定时间的阻塞,所以这个值应该调整到比较大,但是代码中实现会动态伸缩,调整效果不理想
2.cleanupInterval:定时清楚存储文件,将那些完全为空的文件删除
3.maxFileLength:数据文件大小
4.forceRecoverReferenceStore和recoverReferenceStore:
缺省设置为false,amq重启时每次恢复强制从日志一条一条一次redo恢复,100W数据恢复要半个小时
<persistenceAdapter>
<amqPersistenceAdapter syncOnWrite="false" directory="${activemq.base}/data" maxFileLength="32 mb" indexBinSize="8192"
cleanupInterval="30000" forceRecoverReferenceStore="false" recoverReferenceStore="false"/>
</persistenceAdapter>


4.2.3 SystemUsage配置:
SystemUsage配置设置了一些系统内存和硬盘容量,当系统消耗超过这些容量设置时,amq会放慢生产

1.memoryUsage:amq使用内存大小,这个值应该大于所有durable desitination设置的memoryUsage之和,否则会导致硬盘swap,影响性能
2.storeUsage:kaha数据存储大小,如果设置不足,性能会下降到1个1个发的地步
3.tempUsage:非persistent的消息存储在temp区域,我们系统存储都是persistent的消息,该值可以设置小点
<systemUsage>
<systemUsage>
<memoryUsage>
<memoryUsage limit="512 mb"/>
</memoryUsage>
<storeUsage>
<storeUsage limit="8 gb" name="foo"/>
</storeUsage>
<tempUsage>
<tempUsage limit="100 mb"/>
</tempUsage>
</systemUsage>
</systemUsage>

4.3 集群的配置
Failover: 有两种配置方式一种是静态的,把所有的ip地址都写在配置上,这种方式比较郁闷,改一台机子就要加一个ip,所以用动态的。
先加上
<transportConnectors>
<transportConnector uri="tcp://0.0.0.0:61616" discoveryUri="multicast://default"/>
</transportConnectors>
两只集群的activemq都要加上这一段。
Java代码这样写
connectionFactory = new ActiveMQConnectionFactory(
"", "",
"discovery:(multicast://default)");
这样连接的时候就会自动可以错误转发了。
如果214机子坏了,或者重启了,连接会自动切换到49上。

Network:也是有两种配置方式:一种是静态的,所以也是介绍动态:
<networkConnectors>
<networkConnector uri="multicast://default"/>
</networkConnectors>
如果是集群的方式通常都是这两种方式结合一起用。

4.4 master/slave的配置
Master broker不需要特殊的配置。Slave broker需要进行以下配置
<broker masterConnectorURI="tcp://masterhost:62001" shutdownOnMasterFailure="false">
...
<transportConnectors>
<transportConnector uri="tcp://slavehost:61616"/>
</transportConnectors>
</broker>

4.5 jmx的配置
如果要使用jmx.activemq.xml要配置一下。
<broker xmlns="http://activemq.apache.org/schema/core" brokerName="cmcc" useJmx="true" dataDirectory="${activemq.base}/data" destroyApplicationContextOnStop="true">
<managementContext>
<managementContext createConnector="true"/>
</managementContext>
要把这两个属性都设置为true.
连接的java代码如上所说。


参考文档:
ActiveMQ_in_Action.pdf
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值