• ActiveMQの介绍(二)


    • 安全认证

      在conf/activemq.xml配置文件的 broker 标签 中增加下述内容。

     1 <plugins>
     2 <!--  use JAAS to authenticate using the login.config file on the classpath to configure JAAS -->
     3 <!--  添加jaas认证插件activemq在login.config里面定义,详细见login.config-->
     4     <jaasAuthenticationPlugin configuration="activemq" />
     5     <!--  lets configure a destination based authorization mechanism -->
     6     <authorizationPlugin>
     7         <map>
     8             <authorizationMap>
     9                 <authorizationEntries>
    10                     <authorizationEntry topic=">" read="admins" write="admins" admin="admins" />
    11                     <authorizationEntry queue=">" read="admins" write="admins" admin="admins" />
    12                     <authorizationEntry topic="ActiveMQ.Advisory.>" read="admins" write="admins" admin="admins"/>
    13                     <authorizationEntry queue="ActiveMQ.Advisory.>" read="admins" write="admins" admin="admins"/>
    14                 </authorizationEntries>
    15             </authorizationMap>
    16         </map>
    17     </authorizationPlugin>
    18 </plugins>

      开启认证后,认证使用的用户信息由其他配置文件提供。conf/login.config,conf/users.properties,conf/groups.properties

    • 持久化

      所有的持久化配置都在conf/activemq.xml  中配置,配置信息都在 broker 标签内部定义

    1. kahadb方式

      ActiveMQ默认的持久化策略。kahadb是一个文件型数据库。是使用内存+文件保证数据的持久化的。kahadb可以限制每个数据文件的大小。

      <persistenceAdapter>
      <!-- directory:保存数据的目录; journalMaxFileLength:保存消息的文件大小 -->
      <kahaDB directory="${activemq.data}/kahadb" journalMaxFileLength="16mb"/>
      </persistenceAdapter>
    2. AMQ方式

      只适用于5.3版本之前。

      虽然AMQ性能略高于Kaha DB方式,但是由于其重建索引时间过长,而且索引文件占用磁盘空间过大,所以已经不推荐使用。

    3. JDBC方式

      首先定义一个mysql-dsMySQL数据源,然后在persistenceAdapter节点中配置jdbcPersistenceAdapter并且引用刚才定义的数据源。

      dataSource指定持久化数据库的beancreateTablesOnStartup是否在启动的时候创建数据表,默认值是true,这样每次启动都会去创建数据表了,一般是第一次启动的时候设置为true,之后改成false

     1 <broker brokerName="test-broker" persistent="true" xmlns="http://activemq.apache.org/schema/core">
     2     <persistenceAdapter>
     3         <jdbcPersistenceAdapter dataSource="#mysql-ds" createTablesOnStartup="false"/>
     4     </persistenceAdapter>
     5 </broker>
     6 <bean id="mysql-ds" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
     7     <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
     8     <property name="url" value="jdbc:mysql://localhost/activemq?relaxAutoCommit=true"/>
     9     <property name="username" value="activemq"/>
    10     <property name="password" value="activemq"/>
    11     <property name="maxActive" value="200"/>
    12     <property name="poolPreparedStatements" value="true"/>
    13 </bean>

      配置成功后,需要在数据库中创建对应的database,否则无法访问。表格ActiveMQ可以自动创建。

    1 activemq_msgs用于存储消息,Queue和Topic都存储在这个表中:
    2 
    3 ID:自增的数据库主键
    4 CONTAINER:消息的Destination
    5 MSGID_PROD:消息发送者客户端的主键
    6 MSG_SEQ:是发送消息的顺序,MSGID_PROD+MSG_SEQ可以组成JMS的MessageID
    7 EXPIRATION:消息的过期时间,存储的是从1970-01-01到现在的毫秒数
    8 MSG:消息本体的Java序列化对象的二进制数据
    9 PRIORITY:优先级,从0-9,数值越大优先级越高
    1 activemq_acks用于存储订阅关系。如果是持久化Topic,订阅者和服务器的订阅关系在这个表保存:
    2 
    3 主要的数据库字段如下:
    4 CONTAINER:消息的Destination
    5 SUB_DEST:如果是使用Static集群,这个字段会有集群其他系统的信息
    6 CLIENT_ID:每个订阅者都必须有一个唯一的客户端ID用以区分
    7 SUB_NAME:订阅者名称
    8 SELECTOR:选择器,可以选择只消费满足条件的消息。条件可以用自定义属性实现,可支持多属性AND和OR操作
    9 LAST_ACKED_ID:记录消费过的消息的ID。
    1 activemq_lock在集群环境中才有用,只有一个Broker可以获得消息,称为Master Broker,
    2 
    3 其他的只能作为备份等待Master Broker不可用,才可能成为下一个Master Broker。
    4 这个表用于记录哪个Broker是当前的Master Broker。

    只有在消息必须保证有效,且绝对不能丢失的时候。使用JDBC存储策略。

    如果消息可以容忍丢失,或使用集群/主备模式保证数据安全的时候,建议使用levelDBKahadb

  • 相关阅读:
    JavaScript随机数
    javascript函数
    hdu 4122(RMQ)2011福州现场赛B题
    hdu 4119 (模拟+字符串)成都现场赛I题
    hdu 4118(树形dp) 成都现场赛H题
    hdu 4115(2-SAT) 2011 成都现场赛E题
    Codeforces Round #237 (Div. 2) 解题报告
    Codeforces Round #234 (Div. 2) 解题报告
    uva 1411(二分图最大权匹配)
    uva 11383(二分图最大权匹配)
  • 原文地址:https://www.cnblogs.com/yangjiming/p/9179156.html
Copyright © 2020-2023  润新知