个人网站怎么做有创意,pdf怎么做电子书下载网站,全球建筑与室内设计网,企业门户网站开发前言MQ是现在大型系统架构中必不可少的一个重要中间件#xff0c;之前有偏文章《MQ(消息队列)常见的应用场景解析》介绍过MQ的应用场景#xff0c;现在流行的几个MQ是rabbitmq,rocketma,kafka,这几个MQ比较最容易找到相关的文章#xff0c;而也有些系统使用的是activemq之前有偏文章《MQ(消息队列)常见的应用场景解析》介绍过MQ的应用场景现在流行的几个MQ是rabbitmq,rocketma,kafka,这几个MQ比较最容易找到相关的文章而也有些系统使用的是activemq因activemq是相对比较传统的MQ在使用过程中还是会遇到很多坑这里简单列举几个大家可能会遇到的问题把自己使用acitvemq的经验和大家分享一下。Mysql 持久化现在大家使用MQ基本都是会把数据进行持久化MQ默认存储持久化数据使用kahaDB但是鉴于大家对mysql比较熟悉很多人会选择mysql进行数据的持久化因为mysql查看数据还是比较方便的。如果需要把持久化方式改为mysql则需要修改如下配置这里的配置有几个地方大家需要关注下配置说明dataDirectory需要配置和broker 的dataDirectory 一致dataSource数据源的选择关联数据库的具体配置下文会具体说明useDatabaseLock是否使用数据库锁主要是在程序启动的时候会同步查询数据导致数据库锁还需要配置数据库的连接、账号、密码等其中id 名和上文提到的datasource应该是一样的。否则不知道连接哪个实例。数据库连接池问题启动activemq如果提示数据库的连接池有问题这可能是少了lib增加mysql-connector-java-5.1.30.jarcommons-dbcp2-2.1.1.jarcommons-pool2-2.4.2.jar三个包放到lib目录即可管理界面无法打开如果正常启动了但是管理界面无法启动那么需要修改下管理界面的数据库连接。使用MQ主要原因之一是MQ性能比传统关系数据库性能要好但是把MQ数据存储的mysql其实不是一个很好的选择反其道而行之虽然这样用的团队不少但是强烈推荐不要这么做。还是用默认的存储方式确保性能为主。activeMQ过期配置前文说过activemq性能本来就不是最优的特别是使用了mysql作为数据库存储工具后性能更加不靠谱所以性能优化是个重要的工作定期清理MQ的过期信息就显的非常重要了。定期清理无效的队列配置如下定期自动清理无效的Topic和Queue,这个配置只会清除设置的时间内没有被订阅同时队列没有遗留数据的队列。同时对于boker节点需要设置schedulePeriodForDestinationPurge 参数表示多长之间执行一次检测。useJmxtrue schedulePeriodForDestinationPurge5000设置消息的全局过期时间开发的时候大家应该都知道可以设置消息的过期时间是否有统一设置消息的过期时间呢在broker节点下增加如下的配置zeroExpirationOverride10000 /为了便于测试我设置的是10s,当然生产环境根据自己的是实际设置的会比较长。过期的时间会进入死信死信也会沿用此时间到期后系统就会自动删除信息了。经过我个人的实践经验MQ积累的数据达千万级别后性能下降的比较厉害定期清理MQ的消息是优化性能非常重要的一个操作。总结现如今MQ的选择很多建议还是优先选择rabbitmq、rocketmq或者是kafka如果已经选择activemq需要持续关注MQ的消费情况最好能设置过期时间定期清理消息队列的数据避免数据的积累造成性能的下降。微信号itmifen