1、环境:


Windows XP


apache-activemq-5.2.0-bin.zip


 


2、安装


解压缩到apache-activemq-5.2.0-bin.zip到一个目录,比如C:\apache-activemq-5.2.0


 


3、配置


配置就在C:\apache-activemq-5.2.0\conf目录下三个文件


activemq.xml


credentials.properties


log4j.properties


 


4、启动ActiveMQ


运行C:\apache-activemq-5.2.0\bin\activemq.bat


5、测试


ActiveMQ默认使用的TCP连接端口是61616, 通过查看该端口的信息可以测试ActiveMQ是否成功启动 netstat -an|find "61616"


C:\Documents and Settings\Administrator>netstat -an|find "61616" 
    TCP        0.0.0.0:61616                    0.0.0.0:0                            LISTENING


 


6、监控


ActiveMQ5.0版本默认启动时,启动了内置的jetty服务器,提供一个demo应用和用于监控ActiveMQ的admin应用。
admin: http://127.0.0.1:8161/admin/ 
demo: http://127.0.0.1:8161/demo/



===================================================================================================================================


安装要求:

部署需要jdk1.5及以上,编译需要jdk1.5(java5)及以上

Java的环境变量(JAVA_HOME)必须设置,即jdk安装的目录,比如c:\Program Files\jdk.1.6

下载ActiveMQ:http://activemq.apache.org/download.html

解压,如图:

验证是否运行成功:

在浏览器中输入:http://localhost:8161/admin/,出现如下图所示表示成功:

<img size-full="" wp-image-118"="" title="activemq_003" src="http://www.huaishao8.com/wp-content/uploads/2012/04/3.gif" alt="控制台" width="1215" height="539" style="border: 1px solid rgb(221, 221, 221); vertical-align: baseline; margin: 0.4em 0px 0px; padding: 6px; height: auto; max-width: 97.5%; width: auto; background-color: rgb(255, 255, 255);">

此时,ActiveMQ已经安装完成了,接下来配置登录监视控制台的用户名和密码。

打开conf文件夹下的jetty.xml,找到



< bean  id ="securityConstraint" >

         < property  name ="name"  value ="BASIC"   />

         < property  name ="roles"  value ="admin"   />

         < property  name ="authenticate"  value ="false"   />

     </ bean >



把authenticate属性的值改成true即可,重启activemq.bat,再登录监视控制台,就需要输入密码了,默认的用户名和密码是admin/admin。roles属性指的是登录的用户角色,这些登录的用户在jetty-realm.properties配置。

修改web的访问端口,在jetty.xml找到一下配置,修改8161即可。



         < property  name ="connectors" >
             < list >
                 < bean  id ="Connector"  class ="org.eclipse.jetty.server.nio.SelectChannelConnector" >
                     < property  name ="port"  value ="8161"   />
                 </ bean >
             </ list >
         </ property >


ActiveMQ的运行日志存放在data文件夹下的activemq.log中。

 

Linux和Aix系统下的安装:

解压:tar zxvf activemq-x.x.x.tar.gz,进入bin文件夹,运行:./activemq start &,也可以只运行:./activemq console。

验证方式和安全性配置和windows下的配置一样。

ActiveMQ消息持久化一

原文地址:http://www.huaishao8.com/config/activemq/122.html

在broker中设置属性persistent=”true”(默认是true),同时发送的消息也应该是persitent类型的。ActiveMQ消息持久化有三种方式:AMQ、KahaDB、JDBC。

1、AMQ

AMQ是一种文件存储形式,它具有写入速度快和容易恢复的特点。消息存储在一个个文件中,文件的默认大小为32兆,如果一条消息的大小超过了32兆,那么这个值必须设置大点。当一个存储文件中的消息已经全部被消费,那么这个文件将被标识为可删除,在下一个清除阶段,这个文件被删除。默认配置如下:



< 
  persistenceAdapter 
  > 
  
        
  < 
  amqPersistenceAdapter  
  directory 
  ="activemq-data" 
   maxFileLength 
  ="32mb" 
  /> 
  
      
  </ 
  persistenceAdapter 
  >



 

AMQ的属性:

属性名称

默认值

描述

directory

activemq-data

消息文件和日志的存储目录

useNIO

true

使用NIO协议存储消息

syncOnWrite

false

同步写到磁盘,这个选项对性能影响非常大

maxFileLength

32mb

一个消息文件的大小

persistentIndex

true

消息索引的持久化,如果为false,那么索引保存在内存中

maxCheckpointMessageAddSize

4kb

一个事务允许的最大消息量

cleanupInterval

30000

清除操作周期,单位ms

indexBinSize

1024

索引文件缓存页面数,缺省为1024,当amq扩充或者缩减存储时,会锁定整个broker,导致一定时间的阻塞,所以这个值应该调整到比较大,但是代码中实现会动态伸缩,调整效果并不理想。

indexKeySize

96

索引key的大小,key是消息ID

indexPageSize

16kb

索引的页大小

directoryArchive

archive

存储被归档的消息文件目录

archiveDataLogs

false

当为true时,归档的消息文件被移到directoryArchive,而不是直接删除

ActiveMQ消息持久化二


KahaDB

KahaDB是基于文件的本地数据库储存形式,虽然没有AMQ的速度快,但是它具有强扩展性,恢复的时间比AMQ短,从5.4版本之后KahaDB做为默认的持久化方式。默认配置如下:


< 
  persistenceAdapter 
  > 
  
          
  < 
  kahaDB  
  directory 
  ="activemq-data" 
   journalMaxFileLength 
  ="32mb" 
  /> 
  
      
  </ 
  persistenceAdapter 
  >



KahaDB的属性:

property name

default value

Comments

directory

activemq-data

消息文件和日志的存储目录

indexWriteBatchSize

1000

一批索引的大小,当要更新的索引量到达这个值时,更新到消息文件中

indexCacheSize

10000

内存中,索引的页大小

enableIndexWriteAsync

false

索引是否异步写到消息文件中

journalMaxFileLength

32mb

一个消息文件的大小

enableJournalDiskSyncs

true

是否讲非事务的消息同步写入到磁盘

cleanupInterval

30000

清除操作周期,单位ms

checkpointInterval

5000

索引写入到消息文件的周期,单位ms

ignoreMissingJournalfiles

false

忽略丢失的消息文件,false,当丢失了消息文件,启动异常

checkForCorruptJournalFiles

false

检查消息文件是否损坏,true,检查发现损坏会尝试修复

checksumJournalFiles

false

产生一个checksum,以便能够检测journal文件是否损坏。

5.4版本之后有效的属性:

 

 

archiveDataLogs

false

当为true时,归档的消息文件被移到directoryArchive,而不是直接删除

directoryArchive

null

存储被归档的消息文件目录

databaseLockedWaitDelay

10000

在使用负载时,等待获得文件锁的延迟时间,单位ms

maxAsyncJobs

10000

同个生产者产生等待写入的异步消息最大量

concurrentStoreAndDispatchTopics

false

当写入消息的时候,是否转发主题消息

concurrentStoreAndDispatchQueues

true

当写入消息的时候,是否转发队列消息

5.6版本之后有效的属性:

 

 

archiveCorruptedIndex

 false

是否归档错误的索引

从5.6版本之后,有可能发布通过多个kahadb持久适配器来实现分布式目标队列存储。什么时候用呢?如果有一个快速的生产者和消费者,当某一个时刻生产者发生了不规范的消费,那么有可能产生一条消息被存储在两个消息文件中,同时,有些目标队列是危险的并且要求访问磁盘。在这种情况下,你应该用通配符来使用mKahaDB。如果目标队列是分布的,事务是可以跨越多个消息文件的。

每个KahaDB的实例都可以配置单独的适配器,如果没有目标队列提交给filteredKahaDB,那么意味着对所有的队列有效。如果一个队列没有对应的适配器,那么将会抛出一个异常。配置如下:


< 
   persistenceAdapter 
   > 
   
    
   < 
   mKahaDB  
   directory 
   ="${activemq.base}/data/kahadb" 
   > 
   
      
   < 
   filteredPersistenceAdapters 
   > 
   
        
   <!-- 
    match all queues  
   --> 
   
        
   < 
   filteredKahaDB  
   queue 
   =">" 
   > 
   
          
   < 
   persistenceAdapter 
   > 
   
            
   < 
   kahaDB  
   journalMaxFileLength 
   ="32mb" 
   /> 
   
          
   </ 
   persistenceAdapter 
   > 
   
        
   </ 
   filteredKahaDB 
   > 
   
        
   
        
   <!-- 
    match all destinations  
   --> 
   
        
   < 
   filteredKahaDB 
   > 
   
          
   < 
   persistenceAdapter 
   > 
   
            
   < 
   kahaDB  
   enableJournalDiskSyncs 
   ="false" 
   /> 
   
          
   </ 
   persistenceAdapter 
   > 
   
        
   </ 
   filteredKahaDB 
   > 
   
      
   </ 
   filteredPersistenceAdapters 
   > 
   
    
   </ 
   mKahaDB 
   > 
   
   
   </ 
   persistenceAdapter 
   >



如果filteredKahaDB的perDestination属性设置为true,那么匹配的目标队列将会得到自己对应的KahaDB实例。配置如下:

< 
    persistenceAdapter 
    > 
    
    
    < 
    mKahaDB  
    directory 
    ="${activemq.base}/data/kahadb" 
    > 
    
      
    < 
    filteredPersistenceAdapters 
    > 
    
        
    <!-- 
     kahaDB per destinations  
    --> 
    
        
    < 
    filteredKahaDB  
    perDestination 
    ="true" 
      
    > 
    
          
    < 
    persistenceAdapter 
    > 
    
            
    < 
    kahaDB  
    journalMaxFileLength 
    ="32mb" 
      
    /> 
    
          
    </ 
    persistenceAdapter 
    > 
    
        
    </ 
    filteredKahaDB 
    > 
    
      
    </ 
    filteredPersistenceAdapters 
    > 
    
    
    </ 
    mKahaDB 
    > 
    
   
    </ 
    persistenceAdapter 
    >