Activemq运维培训文档

目录

1       activemq 安装过程... 2

2       监控... 4

3       运维配置... 4

3.1        ActiveMQ系统配置... 4

3.2        Activemq集群... 5

3.2.1         基于JDBC的主从模式... 5

3.2.2         基于共享存储(文件)的主从模式... 5

3.2.3         基于zookeeper的主从模式... 6

3.2.4         broker cluster master-slave的区别... 6

3.3        ActiveMQ的消息重发与死信管理(DLQ)7

3.3.1         不使用缺省的死信队列... 7

3.3.2         非持久消息保存到死信队列... 8

3.3.3         过期消息不保存到死信队列... 8

3.3.4         持久消息不保存到死信队列... 8

4       ActiveMQ传输... 9

4.1        支持的传输协议:... 9

4.1.1         TCP Transport. 10

4.1.2         SSL Transport. 10

4.1.3         Multicast Transport. 10

4.2        ActiveMQ自动重连... 10

5       ActiveMQ持久化... 11

6       常用命令... 11

7       性能优化... 12

 

 

 

 

 

 

 

 

1         activemq 安装过程

1、使用 root 用户建立一个普通用户(Activemq 用户)。如:

adduser activemq

passwd activemq

[输入用户密码]

[再次输入用户密码确认]

2、登录activemq用户。

3、http://activemq.apache.org/activemq-591-release.html下载apache-activemq-5.9.1-bin.tar.gz

4、解压tar -xvf /home/activemq/apache-activemq-5.9.1-bin.tar.gz

5、进入activemq根目录:cd /home/activemq/apache-activemq-5.9.1

6、拷贝examples/conf/activemq-jdbc.xml 文件到目录conf/activemq-oracle-jdbc.xml下。

7、vi conf/activemq-oracle-jdbc.xml 根据注释,修改数据源,并且参考activemq.xml引入资源jetty.xmljetty.xml用于启用activemqadmin控制台。

主要做如下修改:

(1)         修改持久化适配器为oracle data source

(2)         修改数据库Oracle Data Source

(3)         引入jetty.xml

修改后的activemq-oracle-jdbc.xml如:

 

8、oracle的驱动jar包复制到lib目录下。

9、启动服务器:bin/activemq start xbean:conf/activemq-oracle-jdbc.xml

按回车后,应该会显示activemq进程的pid。会在data目录下创建一个标识pid的文件。activemq关闭服务器时会查找此文件

10、       可以通过命令:tail -f data/activemq.log 监控activemq的日志

11、       关闭服务器:bin/activemq stop

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2       监控

Activemq控制台:http:// ip:8161/admin 默认用户/密码:admin/admin

控制台界面如下:

3       运维配置

3.1     ActiveMQ系统配置

参考:http://activemq.apache.org/version-5-xml-configuration.html

spring xml配置格式,通常配置

1目标策略,如:生产者流量控制,内存限制,消息数量限制,队列分发顺序;

2、管理上下文;

3、持久化适配器;

4系统用量

5、网络连接器;用于集群内部通讯;

6、传输连接器;用于与客户端消息通讯;

7、关闭勾子;

8、引入其它资源;如WEB控制台;

 

3.2     Activemq集群

master-slave也有多种实现方式。它们的不同只是在共享数据和锁机制上。

3.2.1 基于JDBC的主从模式

需要启动两个activemq服务器(进程),使用相同的数据库(数据源配置信息一致)。因为数据通过数据库共享,放在一个地方,不需要停机恢复master-slave。这种方式,需要额外的数据库服务器,如果数据库失效了,那么就全失效了

当一个服务器启动后,会使用(第一次则创建)三个表,ACTIVEMQ_ACKS,ACTIVEMQ_LOCK,ACTIVEMQ_MSGS

 

ACTIVEMQ_LOCK

此表用于主从模式锁定,当第一个activemq服务器启动后会锁住此表成为master,第二个activemq服务器启动后试图锁住此表不会成功,成为slave

ACTIVEMQ_MSGS

此表用于持久化消息,所有需要持久化的消息会记录在此表中,消息的具体内容是BLOB字段。

3.2.2 基于共享存储(文件)的主从模式

例如SAN存储、NFS文件系统。

3.2.3 基于zookeeper的主从模式

此种模式是5.9版本后新增的。还没有经过大量实践验证。据说通过zookeeper可以很好的解决主从切换的问题。

3.2.4 broker cluster和 master-slave的区别

ActiveMQ有强大而灵活的集群功能,可以做broker的集群,也可以做master-slave方式的集群。前者能在多个broker之前fail-over load-balance,但是在某个节点出故障时,可能导致消息丢失;而后者能实时备份消息,和fail-over,但是不能load- balance

broker cluser的方式,在一个broker上发送的消息可以在其它的broker上收到。当一个broker失效时,客户端可以自动的转到别的broker 上运行,多个broker可以同时提供服务,但是消息只存储在一个broker上,如果那个broker失效了,那么客户端直到它重新启动后才能收到该 broker上的消息,假如很不幸,那个broker的存储介质坏了,那么消息就丢失掉了。

Master-slave方式中,只有master提供服务,slave只是实时的备份master的数据,所以消息不会丢失。当master失效时,slave会自动升为master,客户端会自动转到slave上工作,所以能fail-over。由于只有master提供服务,所以不能将负载分到多个broker上。

 

3.3     ActiveMQ的消息重发与死信管理(DLQ)

DLQ-死信队列(Dead Letter Queue)用来保存处理失败或者过期的消息。

出现以下情况时,消息会被再投递

1.    A transacted session is used and rollback() is called.

2.    A transacted session is closed before commit is called.

3.    A session is using CLIENT_ACKNOWLEDGE and Session.recover() is called.

当一个消息被redelivered超过maximumRedeliveries(缺省为6次,具体设置请参考后面的链接)次数时,会给broker发送一个"Poison ack",这个消息被认为是a poison pill,这时broker会将这个消息发送到DLQ,以便后续处理。

缺省的死信队列是ActiveMQ.DLQ,如果没有特别指定,死信都会被发送到这个队列。

缺省持久消息过期,会被送到DLQ,非持久消息不会送到DLQ

可以通过配置文件(activemq.xml)来调整死信发送策略。

3.3.1  不使用缺省的死信队列

        缺省所有队列的死信消息都被发送到同一个缺省死信队列(ActiveMQ.DLQ),不便于管理。可以通过individualDeadLetterStrategysharedDeadLetterStrategy策略来进行修改。如下:

<broker...>

  <destinationPolicy>

    <policyMap>

      <policyEntries>

        <!— 设置所有队列,使用 '>' ,否则用队列名称 -->

        <policyEntry queue=">">

          <deadLetterStrategy>

            <!--  queuePrefix:设置死信队列前缀

                    useQueueForQueueMessages: 设置使用队列保存死信,还可以设置useQueueForTopicMessages,使用Topic来保存死信

            -->

            <individualDeadLetterStrategy   queuePrefix="DLQ." useQueueForQueueMessages="true" />

          </deadLetterStrategy>

        </policyEntry>

      </policyEntries>

    </policyMap>

  </destinationPolicy>  ...

</broker>

3.3.2  非持久消息保存到死信队列

       <policyEntry queue=">">

         <deadLetterStrategy>

           <sharedDeadLetterStrategy processNonPersistent="true" />

         </deadLetterStrategy>

       </policyEntry>

3.3.3  过期消息不保存到死信队列

       <policyEntry queue=">">

         <deadLetterStrategy>

           <sharedDeadLetterStrategy processExpired="false" />

         </deadLetterStrategy>

       </policyEntry>

3.3.4  持久消息不保存到死信队列

       对于过期的,可以通过processExpired属性来控制,对于redelivered的失败的消息,需要通过插件来实现如下:

丢弃所有死信 
<beans>
  <broker ...>
    <plugins>
      <discardingDLQBrokerPlugin dropAll="true" dropTemporaryTopics="true" dropTemporaryQueues="true" />
    </plugins>
  </broker>
</beans>
丢弃指定目的死信  
<beans>
  <broker ...>
    <plugins>
      <discardingDLQBrokerPlugin dropOnly="MY.EXAMPLE.TOPIC.29 MY.EXAMPLE.QUEUE.87" reportInterval="1000" />
    </plugins>
  </broker>
</beans>
 

4       ActiveMQ传输

一般生产环境池化连接,而且是长连接。消费者也是长连接,服务器推送消息。

org.apache.activemq.pool.PooledConnectionFactory可以池化连接、会话、消息生产者。但不会池化消息消费者。消费者与中间件通常是长连接,中间件会推送消息给消费者。消费时,会有一个预取消息多少的配置。所以关闭消费者会比池化归还消费者更高效。会话及消息生产者是不常用资源(不会始终都有消息要发送),其发生不会线性而是比较波动。所以池化生产者更高效,减少创建连接的成本。当有消费者集合时,可以减少消息预取值。

4.1     支持的传输协议:

Activemq主要有12种传输方式,以下是常用的几种传输方式。

4.1.1    TCP Transport

最常用的是TCP Transport,对于公司目前的情况使用这种即可。

配置语法:服务器端需要加上 transport.*前缀,

可参考:http://activemq.apache.org/tcp-transport-reference.html

TCP Transport属性(选项)可以设置心跳机制,保持连接活跃。

服务器端配置URL(in TransportConnector)

tcp://localhost:61616?transport.trace=false&transport.soTimeout=60000

客户端配置URL

tcp://localhost:61616?trace=false&soTimeout=60000

4.1.2 SSL Transport

4.1.3 Multicast Transport

4.2     ActiveMQ自动重连

参考:http://activemq.apache.org/how-do-i-configure-automatic-reconnection.html

如果一个消息代理失败了, ActiveMQ可以使用failover: 协议自动重连到一个可用的消息代理。不仅自动重连,还会恢复所有的临时目标、会话、生产者以及最重要的消费者。所有这些是在JMSActiveMQ)客户端安静的发生,而不需要在我们的应用代码里考虑。

可以如下方式配置:

failover:tcp://host1:port1,tcp://host2:port2

failover的具体的选项配置信息可参考:

http://activemq.apache.org/failover-transport-reference.html

一般不需要特别配置选项,默认即可。默认情况下failover会跟踪事务,发生中的事务会被重放。

如果服务器传输连接器配置了 updateClusterClients为真,则客户端只需要知道一个地址,服务器会告诉客户端其它的可用的用于失效转移或平衡的机器地址。

 

5       ActiveMQ持久化

1、        JDBC存储(from V4

2、        KahaDB(from V5.3)

3、       LevelDB Store(V5.8)

4、        Replicated LevelDB Store(V5.9)

 

6       常用命令

启动服务器:bin/activemq start xbean:conf/activemq-oracle-jdbc.xm

关闭服务器:bin/activemq stop

监控日志:tail -f data/activemq.log

 

7       性能优化

1、基准模式:基于JDBC的主从模式,可以支持持久化,可以支持故障转移;只需两台机器;保障可靠性。

2、对于不需要持久化的消息,可以使用非持久化模式;

3、对于主题(pub-sub),可以通过集群模式,配置NetworkConnector。多机同时服务。

4、可以将主题与队列,分由不同的机器负责。主题与队列在服务器中没有必须的交集。

5、最后,可以改为通过共享存储(例如SAN)支持消息的持久化。及支持主从模式,支持集群模式。

6、极端情况下,一个服务器可以只支持一两个队列或主题。通过横向硬件扩展达到扩容目的。

 

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值