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代码如上所说。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值