前言

MQ是现在大型系统架构中必不可少的一个重要中间件,之前有偏文章《MQ(消息队列)常见的应用场景解析》介绍过MQ的应用场景,现在流行的几个MQ是rabbitmq,rocketma,kafka,这几个MQ比较最容易找到相关的文章,而也有些系统使用的是activemq,因activemq是相对比较传统的MQ,在使用过程中还是会遇到很多坑,这里简单列举几个大家可能会遇到的问题,把自己使用acitvemq的经验和大家分享一下。

Mysql 持久化

现在大家使用MQ,基本都是会把数据进行持久化,MQ默认存储持久化数据使用kahaDB,但是鉴于大家对mysql比较熟悉,很多人会选择mysql进行数据的持久化,因为mysql查看数据还是比较方便的。如果需要把持久化方式改为mysql,则需要修改如下配置:

 <persistenceAdapter><jdbcPersistenceAdapter dataDirectory="${activemq.data}" dataSource="#mysql-ds" createTablesOnStartup="false" useDatabaseLock="false"/><!-- 下面是默认的kahaDB方式,注释掉 --><!-- <kahaDB directory="${activemq.data}/kahadb"/> --></persistenceAdapter>

这里的配置有几个地方大家需要关注下:

配置 说明
dataDirectory 需要配置和broker 的dataDirectory 一致
dataSource 数据源的选择,关联数据库的具体配置,下文会具体说明
useDatabaseLock 是否使用数据库锁,主要是在程序启动的时候会同步查询数据,导致数据库锁

还需要配置数据库的连接、账号、密码等:

 <!-- MySql DataSource  Setup --><bean id="mysql-ds" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close"><property name="driverClassName" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql://0.0.0.0:3306/activemq?relaxAutoCommit=true"/><property name="username" value="root"/><property name="password" value="******"/><property name="poolPreparedStatements" value="true"/></bean>

其中,id 名和上文提到的datasource应该是一样的。否则,不知道连接哪个实例。

数据库连接池问题

启动activemq如果提示数据库的连接池有问题,这可能是少了lib,增加

  • mysql-connector-java-5.1.30.jar
  • commons-dbcp2-2.1.1.jar
  • commons-pool2-2.4.2.jar

三个包,放到lib目录即可

管理界面无法打开

如果正常启动了,但是管理界面无法启动,那么需要修改下管理界面的数据库连接。

使用MQ主要原因之一是MQ性能比传统关系数据库性能要好,但是把MQ数据存储的mysql其实不是一个很好的选择,反其道而行之,虽然这样用的团队不少,但是强烈推荐不要这么做。还是用默认的存储方式,确保性能为主。

activeMQ过期配置

前文说过,activemq性能本来就不是最优的,特别是使用了mysql作为数据库存储工具后,性能更加不靠谱,所以性能优化,是个重要的工作,定期清理MQ的过期信息,就显的非常重要了。

定期清理无效的队列

配置如下:

<destinationPolicy><policyMap><policyEntries><policyEntry queue=">" gcInactiveDestinations="true" inactiveTimoutBeforeGC="10000"><deadLetterStrategy><sharedDeadLetterStrategy processExpired="true" expiration="30000"/></deadLetterStrategy></policyEntry><policyEntry topic=">" gcInactiveDestinations="true" inactiveTimoutBeforeGC="10000" ><pendingMessageLimitStrategy><constantPendingMessageLimitStrategy limit="1000"/></pendingMessageLimitStrategy></policyEntry></policyEntries></policyMap></destinationPolicy>

定期自动清理无效的Topic和Queue,这个配置,只会清除设置的时间内,没有被订阅,同时队列没有遗留数据的队列。
同时,对于boker节点,需要设置schedulePeriodForDestinationPurge 参数,表示多长之间执行一次检测。

 <broker xmlns="http://activemq.apache.org/schema/core" brokerName="localhost01" dataDirectory="${activemq.data}" useJmx="true" schedulePeriodForDestinationPurge="5000">

设置消息的全局过期时间

开发的时候,大家应该都知道可以设置消息的过期时间,是否有统一设置消息的过期时间呢?
在broker节点下增加如下的配置:

  <plugins><!-- 86400000 为一天,设置为10天过期 --><timeStampingBrokerPlugin ttlCeiling="10000"zeroExpirationOverride="10000" /></plugins>

为了便于测试,我设置的是10s,当然,生产环境根据自己的是实际设置的会比较长。过期的时间会进入死信,死信也会沿用此时间,到期后,系统就会自动删除信息了。
经过我个人的实践经验,MQ积累的数据达千万级别后,性能下降的比较厉害,定期清理MQ的消息,是优化性能非常重要的一个操作。

总结

现如今,MQ的选择很多,建议还是优先选择rabbitmq、rocketmq或者是kafka,如果已经选择activemq,需要持续关注MQ的消费情况,最好能设置过期时间,定期清理消息队列的数据,避免数据的积累,造成性能的下降。


微信号:itmifen

image

activeMQ 填坑记相关推荐

  1. Java web 开发填坑记 2 -如何正确的创建一个Java Web 项目

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/72566261 本文出自[赵彦军的博客] Java web 开发填坑记 1-如何正确 ...

  2. Android项目开发填坑记-Fragment的onAttach

    背景 现在Android开发多使用一个Activity管理多个Fragment进行开发,不免需要两者相互传递数据,一般是给Fragment添加回调接口,让Activity继承并实现. 回调接口一般都写 ...

  3. 【SAP PO】X-DOC:SAP PO 接口配置 REST 服务对接填坑记

    X-DOC:SAP PO 接口配置 REST 服务对接填坑记 1.背景 2.PO SLD配置 3.PO https证书导入 1.背景 (1)需求背景: SAP中BOM频繁变更,技术人员在对BOM进行变 ...

  4. 共享内存 - shmget填坑记

    shmget设置的size值,不能大于最大值SHMMAX和小于最小值SHMMIN 且若是key值对应的段已经存在,那么后来使用shmget的size值要小于等于原来的值函 而后询问了一下那位程序猿,他 ...

  5. 填坑记1-nrf52840出现error flash download failed -cortex-M4错误的解决办法-清风电子开发板

    填坑类型: nrf52840出现error flash download failed -cortex-M4错误 使用板子:清风电子开发板 问题描述: keil4出错,keil5不出错(意思是其他ke ...

  6. ios企业版如果证书过期了_iOS 企业证书过期填坑记

    入坑篇 前线客服传来消息 - "用户反馈一打开我们的 App,就直接闪退了",刚听到这个消息,我很吃惊,上一期发的新版本 QA 都有验证过.难道是因为功能权限的问题导致的,赶紧跟客 ...

  7. Hexo博客备份移植填坑记

    我们用Hexo写好了博客,有时候重装系统或者换了台电脑需要更新博客,就存在博客源文件怎么备份和移植的问题.网上有相关的教程,不过有一些纰漏,本文填坑. 欢迎到我的博客交流和查看更详细的内容,有问题请在 ...

  8. activemq和mysql_activeMQ 填坑记

    前言 MQ是现在大型系统架构中必不可少的一个重要中间件,之前有偏文章<MQ(消息队列)常见的应用场景解析>介绍过MQ的应用场景,现在流行的几个MQ是rabbitmq,rocketma,ka ...

  9. 支付开发填坑记之支付宝

    支付宝在所有支付方式中最好开发的了,因为文档比较清晰,而且开发起来也比较简单.因此,支付宝的坑是相对较少的. 原文地址 APP支付 APP支付步骤为: 获取支付宝的配置信息. 生成商家订单信息. 根据 ...

最新文章

  1. 学习笔记-express路径问题
  2. 【C 语言】文件操作 ( 配置文件读写 | 框架搭建 | 主函数逻辑结构 | 启动无限循环 | 接收用户操作值 | 宏定义 | 显示操作菜单 )
  3. C#编程总结(七)数据加密——附源码
  4. 将本地docker镜像推送到阿里云镜像仓库
  5. amd一点也不yes_最不值得买的高端显卡!RTX3080从真香变成了鸡肋?
  6. VTK:网格之HyperTreeGridSource
  7. 操作符(++,+,+=,小于号,(),--等)重载
  8. 设置input标签禁用_Vue造轮子 | input组件
  9. android tab 切换动画,Android之ViewPager+TabLayout组合实现导航条切换效果(微信和QQ底部多标签切换)...
  10. 超好用的webssh(支持秘钥登录)
  11. zynq中mgtx应用_【干货分享】ZYNQ常用外设设计 (上)
  12. mysql5.1 主主同步_mysql主主同步指定库的指定表(version 5.1~5.7)
  13. 散点图为什么是两组点_SAT数学易错点排雷之scatter plot
  14. android adb模拟点击,Android adb 模拟滑动 按键 点击事件(示例代码)
  15. 马士兵讲jsp项目--BBS项目分析笔记
  16. python判断键盘输入_python实时检测键盘输入函数的示例
  17. wifi芯片型号厂家简介
  18. 全国31省份实体经济发展水平数据 (2004-2017年)
  19. Java桌面截图程序(带快捷键)
  20. 算法训练 Beaver's Calculator (蓝桥杯)

热门文章

  1. 国外发明的10大仿生机械,这才是真正的黑科技!
  2. 科技创新2030—“新一代人工智能”重大项目拟立项的2018年度项目公示清单
  3. 边缘计算技术发展与对策研究
  4. 「谷歌大脑」提出通过对长序列进行摘要提取,AI可自动生成「维基百科」
  5. 中科院自动化所介绍深度强化学习进展:从AlphaGo到AlphaGo Zero
  6. 未来的程序员该如何选公司和谋规划?
  7. 为何把日志打印到控制台很慢?
  8. chrome 跨域插件
  9. 查找命令find的用法
  10. Spark的transformation和action算子简介