暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

ActiveMQ(二)

丁锅笔记 2018-05-20
451
  • 默认情况下,日志查看地址:data/activemq.log

  • ActiveMQ支持的传输协议


    client端和broker端的通讯协议
    TCP(默认)、UDP 、NIO、SSL、Http(s)、vm
    可以在 conf/activemq.xml查看或者添加协议。

  • ActiveMQ持久化存储

    • 1. kahaDB  默认的存储方式


      优势:消息存储容量高,恢复数据快。
      默认的配置在activemq的conf/activemq.xml文件下。如图
      <persistenceAdapter>
          <kahaDB directory="${activemq.data}/kahadb"/>
      </persistenceAdapter>

    • 2. AMQ 基于文件的存储方式
      优势:写入速度很快,容易恢复。
      文件默认大小是32M.
      默认的配置在activemq的conf/activemq.xml文件下。
      <persistenceAdapter>
            <amqPersistenceAdapter directory="" maxFileLength=""/>
      </persistenceAdapter>

    • 3. JDBC 基于数据库的存储


      3.1,实现你要配置JDBC,要在conf/activemq.xml中配置数据库源和修改存储方式:
       <bean id="mysqlDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
                 <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
                 <property name="url" value="jdbc:mysql://localhost:3306/activemq"/>
                 <property name="username" value="root"/>
                 <property name="password" value="root123"/>
      </bean>
      <persistenceAdapter>
                 <!-- <kahaDB directory="${activemq.data}/kahadb"/>-->
                 <jdbcPersistenceAdapter dataSource="#mysqlDataSource" createTablesOnStartup="true"/>
       </persistenceAdapter>
      3.2,在lib下添加jar包:commons-dbcp,commons-pool,mysql-connector-java等3个jar包。
      3.3,sh bin/activemq start
      3.4,此时在数据库中会有如下表自动生成:
      ACTIVEMQ_ACKS : 存储持久订阅的信息
      ACTIVEMQ_LOCK : 锁表(用来做集群的时候,实现master选举的表)
      ACTIVEMQ_MSGS : 消息表
      3.5,当我们使用生产者生产消息时,会在ACTIVEMQ_MSGS产生数据
      3.6,当我们使用消费者消费该消息时,ACTIVEMQ_MSGS表会去掉该消息。
      3.7,当然这里的JDBC store方式对性能不太好,可能导致最后的瓶颈都在数据库这块。
      3.8,因此还提供了JDBC message store with ActiveMQ journal方式(就是提供缓存的方式不实时从数据库中操作数据,而是通过缓存的方式)
      JDBC Message store with activeMQ journal
      1. 引入了快速缓存机制,缓存到Log文件中。
      2. 性能会比jdbc store要好。
      3. JDBC Message store with activeMQ journal 不能应用于master/slave模式。

    • 4.Memory基于内存的存储方式

    • 5.LevelDB(activeMQ5.8 以后引入的持久化策略。通常用于集群配置)下节处理

  • ActiveMQ的网络连接
    activeMQ如果要实现扩展性和高可用性的要求的话,就需要用用到网络连接模式

    • 丢失的消息的处理办法


      从5.6版本开始,在destinationPolicy上新增了一个选项replayWhenNoConsumers属性,
      这个属性可以用来解决当broker1上有需要转发的消息但是没有消费时,把消息回流到它原始的broker。
      同时把enableAudit设置为false,为了防止消息回流后被当作重复消息而不被分发。
      分别在两台服务器通过如上在activeMQ.xml中配置即可完成消息回流处理。

    • NetworkConnector


      主要用来配置broker与broker之间的通信连接,服务器S1和S2通过NewworkConnector相连。

    • 静态网络连接


      修改activemq.xml,增加如下内容:
       <networkConnectors>
              <networkConnector uri="static://(tcp://192.168.254.128:61616,192.168.254.133:61616)"></networkConnector>
       </networkConnectors>
      注意
      先检查防火墙,不然会有图1报错。
      其次,配置完重启后查看管理平台network会看到另外一台服务器的数据。
      (实现双机热备,同时提供服务。即生产者的消息数据发送给broker1后,连接broker2的消费者也能消费这些数据,这时这些消息会从broker1转移到broker2,若此时只是消费了其中一部分消息,那么就会剩余部分消息到broker2,这时用连接broker1的消费者去消费是消费不了的。
      这时,broker2当机了,消息就丢失了)

    • 动态网络连接 待续

         

文章转载自丁锅笔记,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论