?Aurora???Apache ActiveMQ

2011-12-26 14:36:28by ???

AuroraWithAMQ

Apache ActiveMQ简介

Apache ActiveMQ 是Apache出品,最流行的、功能强劲的开源消息组件。ActiveMQ完全支持JMS1.1和J2EE 1.4规范。

ActiveMQ特性列表:


   1. 多种语言和协议编写客户端。语言: Java, C, C++, C#, Ruby, Perl, Python, PHP。应用协议: OpenWire,Stomp REST,WS Notification,XMPP,AMQP   
   2. 完全支持JMS1.1和J2EE 1.4规范 (持久化,XA消息,事务)   
   3. 对Spring的支持,ActiveMQ可以很容易内嵌到使用Spring的系统里面去,而且也支持Spring2.0的特性   
   4. 通过了常见J2EE服务器(如 Tomcat,Geronimo,JBoss 4,GlassFish,WebLogic)的测试,其中通过JCA 1.5 resource adaptors的配置,可以让ActiveMQ可以自动的部署到任何兼容J2EE 1.4 商业服务器上   
   5. 支持多种传送协议:in-VM,TCP,SSL,NIO,UDP,JGroups,JXTA   
   6. 支持通过JDBC和journal提供高速的消息持久化   
   7. 从设计上保证了高性能的集群,客户端-服务器,点对点   
   8. 支持Ajax   
   9. 支持与Axis的整合   
   10. 可以很容易得调用内嵌JMS provider,进行测试


ActiveMQ安装


 * 首先去
activemq下载5.42版本(5.5以上版本只支持JDK1.6以上), 
 * 解压apache-activemq-5.4.2-bin.zip(或者apache-activemq-5.4.2-bin.tar.gz )目录如下:
 
  +bin (windows下面的bat和unix/linux下面的sh)

  +conf (activeMQ配置目录,包含最基本的activeMQ配置文件)

  +data (默认是空的)

  +docs (index,replease版本里面没有文档,-.-b不知道为啥不带)
   
  +example (几个例子)
   
  +lib (activemMQ使用到的lib)
   
  -activemq-all-5.4.2.jar(ActiveMQ的binary)

  -LICENSE.txt

  -NOTICE.txt
   
  -README.txt
   
  -user-guide.html

  你可以使用bin\activemq.bat(activemq) 启动.


  几个小提示:
1. 这个仅仅是最基础的ActiveMQ的配置,很多地方都没有配置因此不要直接使用这个配置用于生产系统   
2. 有的时候由于端口被占用,导致ActiveMQ错误,ActiveMQ可能需要以下端口1099(JMX),61616(默认的TransportConnector)   
3. 如果没有物理网卡,或者MS的LoopBackAdpater Multicast会报一个错误

测试你的ActiveMQ

启动activeMQ后,再打开两个命令窗口,都进入activemq\example


* 一个运行:ant consumer
* 一个运行:ant producer

如果成功发送/接收了消息就OK了。

在aurora中使用activemq


1. 获得aurora activemq的支持jar(从

https://aurora-project.googlecode.com/svn/trunk/aurora-plugin/aurora/plugin/amq
编译获得)、以及从activemq/lib中复制activemq-core-5.4.2.jar、geronimo-jms-1.1-spec-1.1.1.jar 放入%WEB_HOME%/web-inf/lib中

2. 在%WEB_HOME%/web-inf/下添加amq.config,内容参考如下


<?xml version="1.0" encoding="UTF-8"?>
<amq:AMQ-client-instance xmlns:amq="aurora.plugin.amq"  xmlns:jms="aurora.plugin.jms" 
url="failover:(tcp://localhost:61616,tcp://192.168.11.66:61616)">
        <jms:messageHandlers>
                <jms:defaultMessageHandler name="handler1" procedure="init.load_priviledge_check_data"/>
        </jms:messageHandlers>
        <jms:consumers >
                <jms:consumer topic="test1">
                        <jms:events>
                                <jms:event message="resource_update"  handler="handler1"/>
                        </jms:events>
                </jms:consumer>
        </jms:consumers>
</amq:AMQ-client-instance>

    
 说明 failover是amq内置的一种集群协议,它支持自动重连机制,即如果localhost机器意外中断,会自动重连到remotehost1。此处我们可以定义多台主机。
 


   3.修改apache-activemq-5.4.2\conf\activemq.xml文件,以配合实现客户端的重连机制

<beans
  xmlns="http://www.springframework.org/schema/beans"...>
   <!--其他配置-->
  <broker xmlns="http://activemq.apache.org/schema/core"...>
      <persistenceAdapter>
        <jdbcPersistenceAdapter dataDirectory="${activemq.base}/data" dataSource="#oracle-ds"/>
      </persistenceAdapter>
   <!--其他配置-->
  </broker>
  <bean id="oracle-ds" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
    <property name="url" value="jdbc:oracle:thin:@localhost:1521:AMQDB"/>
    <property name="username" value="scott"/>
    <property name="password" value="tiger"/>
    <property name="maxActive" value="200"/>
    <property name="poolPreparedStatements" value="true"/>
  </bean>
</beans>

 在启动amq后,会在数据中自动创建三种表
  * ACTIVEMQ_ACKS 接收应答表
  * ACTIVEMQ_MSGS 发送信息表
  * ACTIVEMQ_LOCK 主机锁表
 amq服务器的重连机制如下:
 如客户端所配置的,我们有两台主机,一台是localhost,一台是remotehost1。两台机器的activemq.xml连接同一个数据库(即配置信息相同)。 
 启动服务的时候,同时去数据库中抢夺资源锁,谁先抢到,谁就是主机,没抢到处于等待状态,等这台主机意外宕机后,再去抢锁,同样是谁先抢到,就谁是主机。
4. 调用:在svc中输入<jms:jms-message-dispatch message="resource_update" xmlns:jms="aurora.plugin.jms"/>
5. 启动
  1. 启动activeMQ
  2. 重启Web服务

Demo
    Attachments

      Comments

      0 Responses to the article

      暂时没有评论。

      发表评论