一.消息目的地策略

在节点destinationPolicy配置策略,可以对单个或者所有的主题和队列进行设置,使用流量监控,当消息达到memoryLimit的时候,ActiveMQ会减慢消息的产生甚至阻塞,destinationPolicy的配置如下:

二.存储配置

producerFlowControl表示是否监控流量,默认为true,如果设置为false,消息就会存在磁盘中以防止内存溢 出;memoryLimit表示在producerFlowControl=”true”的情况下,消息存储在内存中最大量,当消息达到这个值 时,ActiveMQ会减慢消息的产生甚至阻塞。

队列分发策略如下:

propertydefaultdescription

useConsumerPriority

true

use the priority of a consumer when dispatching messages from a Queue

strictOrderDispatch

false

if true queue will not round robin consumers, but it'll use a single one until its prefetch buffer is full

optimizedDispatch

false

don't use a separate thread for dispatching from a Queue

lazyDispatch

false

only page in from store the number of messages that can be dispatched at time

consumersBeforeDispatchStarts

0

when the first consumer connects, wait for specified number of consumers before message dispatching starts

timeBeforeDispatchStarts

0

when the first consumer connects, wait for specified time (in ms) before message dispatching starts

queuePrefetch

n/a

sets the prefetch for consumers that are using the default value

expireMessagesPeriod

30000

the period (in ms) of checks for message expiry on queued messages, value of 0 disables

简单翻译如下:

useConsumerPriority:默认策略,按照用户优先级设置发送消息

strictOrderDispatchPolicy:保证每个topic consumer会以相同的顺序接收消息,代价是性能上的损失

当producer发送的持久化消息到达broker之后,broker首先会把它保存在持久存储中。接下来,如果发现当前有活跃的 consumer,如果这个consumer消费消息的速度能跟上producer生产消息的速度,那么ActiveMQ会直接把消息传递给broker 内部跟这个consumer关联的dispatch queue;如果当前没有活跃的consumer或者consumer消费消息的速度跟不上producer生产消息的速度,那么ActiveMQ会使用 Pending Message Cursors保存对消息的引用。在需要的时候,Pending Message Cursors把消息引用传递给broker内部跟这个consumer关联的dispatch queue。以下是两种Pending Message Cursors:

VM Cursor:在内存中保存消息的引用。

File Cursor:首先在内存中保存消息的引用,如果内存使用量达到上限,那么会把消息引用保存到临时文件中。

在缺省情况下,ActiveMQ 会根据使用的Message Store来决定使用何种类型的Message Cursors,但是你可以根据destination来配置Message Cursors。

对于topic,可以使用的pendingSubscriberPolicy 有vmCursor和fileCursor。可以使用的PendingDurableSubscriberMessageStoragePolicy有

vmDurableCursor 和 fileDurableSubscriberCursor;对于queue,可以使用的pendingQueuePolicy有vmQueueCursor 和 fileQueueCursor。

Message Cursors的使用参考:http://activemq.apache.org/message-cursors.html

三.主备配置

设置消息在内存、磁盘中存储的大小,配置如下:

memoryUsage表示ActiveMQ使用的内存,这个值要大于等于destinationPolicy中设置的所有队列的内存之和。

storeUsage表示持久化存储文件的大小。

tempUsage表示非持久化消息存储的临时内存大小。

ActiveMQ的主备有三种方式:纯Master/Slave、文件共享方式、数据库共享方式。

1、纯Master/Slave

这种方式的主备不需要对Master Broker做特殊的配置,只要在Slave Broker中指定他的Master就可以了,指定Master有两种方式,最简单的配置就是在broker节点中添加 masterConnectorURI=”tcp://localhost:61616″即可,还有一种方式就是添加一个services节点,可以指定 连接的用户名和密码,配置如下:

纯Master/Slave只允许一个Slave连接到Master上面,也就是说只能有2台MQ做集群,同时当Master挂了之后需要停止Slave来恢复负载。

2、数据库共享方式

这种方式的主备采用数据库做消息的持久化,支持多个Slave,所有broker持久化数据源配置成同一个数据源,当一个broker获取的数据库锁之 后,其他的broker都成为slave并且等待获取锁,当master挂了之后,其中的一个slave将会立刻获得数据库锁成为master,重启之前 挂掉的master之后,这个master也就成了slave,不需要停止slave来恢复。由于采用的是数据库做为持久化,它的性能是有限的。

3、文件共享方式

这种方式的主备具有和数据库共享方式的负载一样的特性,不同的是broker的持久化采用的是文件(我这里用KahaDB),slave等待获取的锁是文件锁,它具有更高的性能,但是需要文件共享系统的支持。

Window下共享KahaDB持久化的目录,配置如下:

Linux下需要开启NFS服务,具体操作如下:

创建共享目录(192.168.0.1):

1、 修改etc/exports,添加需要共享的目录:/opt/mq/data *(rw,no_root_squash)

2、 启动NFS服务 service nfs start/restart

3、 查看共享 showmount –e

4、 NFS服务自启动 chkconfig –level 35 nfs on

挂载共享目录(192.168.0.2):

1、 挂载:mount –t nfs 192.168.0.1:/opt/mq/data /opt/mq/data

2、 启动自动挂载:在etc/fstab文件添加10.175.40.244:/opt/mq/data /opt/mq/data nfs defaults 0 0

然后指定KahaDB的持久化目录为/opt/mq/data即可。

AIX系统的文件共享和Linux类似,也是启动NFS服务。

注意:如果Master服务器宕机了,Slave是不会获得文件锁而启动,直到Master服务器重启。

Window下Master上有Slave连接时如图:

客户端连接的brokerURL为failover:(tcp://localhost:61616,tcp://localhost:61617)。用 第三部分的代码测试,先向Master Broker发送一个消息,然后关闭master,运行获取消息的方法,即可获取之前发送的消息。

四.负载均衡配置

ActiveMQ可以实现多个mq之间进行路由,假设有两个mq,分别为brokerA和brokerB,当有一条消息发送到brokerA的队列 test中,有一个客户端连接到brokerB上,并且要求获取test队列的消息时,brokerA中队列test的消息就会路由到brokerB上, 反之brokerB的消息也会路由到brokerA。

静态路由配置,brokerA不需要特别的配置,brokerB需要配置networkConnectors节点,具体配置如下:

静态路由支持failover,如:static:failover://(tcp://host1:61616,tcp://host2:61616)。

动态路由配置,每个mq都需要配置如下:

注意:networkConnectors需要配置在persistenceAdapter之前。

重启ActiveMQ,可以看到brokerA的日志如图:

五.持久化配置

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

1、AMQ

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

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,而不是直接删除

2、KahaDB

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

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,那么意味着对所有的队列有效。如果一个队列没有对应的适配器,那么将会抛出一个异常。配置如下:

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

3、JDBC

配置JDBC适配器:

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

MYSQL持久化bean

SQL Server持久化bean

Oracle持久化bean

DB2持久化bean

activemq mysql 配置详解_ActiveMQ配置详解相关推荐

  1. mysql mybatis配置_mybatis详解 与配置mybatis+spring+mysql.doc

    mybatis详解 与配置mybatis+spring+mysql.doc 还剩 30页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,很抱歉,此页已超出免费预览范围啦! 如果喜欢就下载吧, ...

  2. MySQL主从同步详解与配置

    https://zhuanlan.zhihu.com/p/335142300 MySQL主从同步详解与配置 第一部分[原理解析] * 应用背景* MySQL数据库自身提供的主从复制功能可以方便的实现数 ...

  3. MySQL日志发送syslog_syslog详解及配置远程发送日志和远程日志分类

    1.日志协议syslog 1.1.syslog简介 完善的日志分析系统应该能够通过多种协议(包括syslog等)进行日志采集并对日志分析,因此日志分析系统首先需要实现对多种日志协议的解析.其次,需要对 ...

  4. mysql my.cnf参数配置_MySQLmy.cnf参数配置优化详解

    本配置文件针对Dell R710,双至强E5620.16G内存的硬件配置.CentOS 5.6 64位系统,MySQL 5.5.x 稳定版.适用于日IP 50-100w,PV 100-300w的站点, ...

  5. mysql 5.5数据库主从配置步骤详解

    上次给大家介绍了mysql 5.1主从搭建配置教程,这次我们来实现mysql 5.5的主从复制,其实大体上配置是差不多的,只有点细微的差别. 系统:centos 5.x 需要的软件包:mysql-5. ...

  6. mysql加入新的从节点怎么配置,Mysql 5.7从节点配置多线程主从复制的方法详解

    前言 Mysql 采用多线程进行复制是从 Mysql 5.6 开始支持的内容,但是 5.6 版本下有缺陷,虽然支持多线程,但是每个数据库只能一个线程,也就是说如果我们只有一个数据库,则主从复制时也只有 ...

  7. mysql 5.7 多线程主从复制_Mysql 5.7从节点配置多线程主从复制的方法详解

    前言 Mysql 采用多线程进行复制是从 Mysql 5.6 开始支持的内容,但是 5.6 版本下有缺陷,虽然支持多线程,但是每个数据库只能一个线程,也就是说如果我们只有一个数据库,则主从复制时也只有 ...

  8. mysql数据库tns配置_oracle数据库tns配置方法详解

    TNS是Oracle Net的一部分,专门用来管理和配置Oracle数据库和客户端连接的一个工具,在大多数情况下客户端和数据库要通讯,必须配置TNS,下面看一如何配置它吧 TNS简要介绍与应用 Ora ...

  9. ElasticSearch预警服务-Watcher详解-Schedule配置

    介绍 Watcher服务详解-定时器的设定 关于Schedule配置选择,Watcher提供了丰富的时间语法支持,采用UTC时间,来我们一起看下如何设置: 支持的设置方式: hourly:按小时周期设 ...

最新文章

  1. Lucene4 入门(2)–Field类及辅助类说明
  2. 互联网公司「敏捷开发」,打造高效执行能力
  3. OpenStack 架构图
  4. 特斯联再获20亿元融资,跻身AIoT独角兽,光大京东讯飞万达入股
  5. JavaEE Web开发之Servlet篇
  6. 台式电脑可以连接手机热点吗_移动硬盘可以连接手机吗
  7. 百度的索引真的比雅虎多么?
  8. ACM 中常用的算法有哪些? 2014-08-21 21:15 40人阅读 评论(0) 收藏...
  9. 从底层重学 Java 之两大浮点类型 GitChat连接
  10. centos7安装java6_CentOS7.6安装jdk1.8
  11. 猎豹浏览器怎么设置双击关闭网页 双击关闭网页设置方法
  12. 2018第二届数据科学家大会,诚邀您的参加!
  13. 原来Java大数据才是真正的高富帅!
  14. oracle:实现滑动平均效果
  15. 安卓渗透测试工具——Drozer(安装和使用)
  16. pytorch的图像通道变换,torchvision.transforms.Compose,T.ToTensor
  17. node-webkit笔记
  18. org.apache.struts2.json.JSONException: java.lang.reflect.InvocationTargetException异常解决
  19. python调试代码举例
  20. python snap7 plc_python-snap7-master

热门文章

  1. 运营商,虚拟运营商 电信行业的 crm,计费,账务,bss,boss 系统整套解决方案讨论和分享
  2. Taro 支付宝小程序开发
  3. linux c 出现报错warning: implicit declaration of function ‘atoi’问题
  4. 装饰者模式(带例子)
  5. LCP 29. 乐团站位(leetcode)
  6. Linux下使用Vim编辑器异常退出E325:ATTENTION错误
  7. 放弃北大医学院、清华定向生选择了上海交大,五年后我后悔吗
  8. 华为国产系统Android,在小米MIUI或华为中,哪种手机系统最适合2019年的国产Android?...
  9. python股票分析系列_Python股票分析系列——基础股票数据操作(二).p4
  10. 北邮计算机学院二组,北邮信息与通信工程学院导师组介绍(二)