ActiveMQ是一个流行的开源MQ,我们也大规模应用在网站的方方面面,每天处理上亿消息,取得了较好效果。ActiveMQ有一个很好很强大的插件体系,提供了很强的扩展能力,ActiveMQ本身就是使用这一套插件体系实现了很多扩展功能,包括他的权限管理,日志管理,事务等模块都是作为一个插件集成的,我们自己也在消息路由、补偿式事务方面使用了它的插件功能,确实非常方便。
在ActiveMQ中,Broker代表一个运行的MQ节点,ActiveMQ的插件实际上是基于Broker的一个Filter链,整个设计类似于servlet的Filter结构,所有的Plugin构成一个链式结构,每个插件实际上都是一个"Interceptor",类结构图如下:
其中Broker接口封装了一个AMQ节点的方方面面的方法,包括连接管理、session管理、消息的发送和接收以及其它的一些功能,BrokerFilter实现这个接口,并提供了链式结构支持,可以拦截所有Broker方法的实现并传递结果给链式结构的下一个,形成了一个完整的"职责链"模式,具体层次关系如下,其中,"System Plugin"是指AMQ内部使用Plugin机制实现的一些系统功能,用户不能定制,"AMQ Plugin"指的是ActiveMQ已经实现好了,可以在配置文件中自由选择的一些插件,例如简单的安全插件,JAAS安全插件和DLQ插件等等,用户插件就是指用户自己实现的amq插件,需要用户把相关jar包放入到amq的启动classpath中,并在配置文件中进行配置才能正确加载的插件。
在上面这个层次结构中,最下面的RegionBroker是核心组件,在其之上的都是Broker的插件,继承之于BrokerFilter,和Broker保持接口兼容但是扩展Broker的功能。
下面举一个简单的例子,具体说明一下AMQ的插件是如何工作的。
我们在使用AMQ的过程中发现,在测试环境维护方面有很大的麻烦,具体表现在很多同学在测试项目的时候往往只关注自己项目牵涉的队列,不会去消费其他"不相关"的队列,这样导致的一个问题就是ActiveMQ经常发生大量数据阻塞,导致测试环境不可用,影响相关项目的测试工作。为了避免这个问题,我们假定在测试环境可以定义以下一些限制条件:
1、 所有队列堆积消息不超过1000条,超过之后立即清除。
2、 消息超过1个小时没有消费,就直接过期。
我们可以编写一个简单的amq插件来完成这两个限制条件:
首先,编写一个插件安装类:
然后,将这两个类打包为myplugin.jar,并放在activemq启动目录下的lib目录下
最后,在activemq.xml文件中增加一个简单的spring配置项:
<bean xmlns="http://www.springframework.org/schema/beans"
id="purgePlugin"
class="com.alibaba.napoli.plugins.MessageControlBrokerPlugin">
</bean>
然后,重启activemq,就会发现这个插件已经被加载。
分享到:
相关推荐
NULL 博文链接:https://wdzwdz.iteye.com/blog/1154217
ActiveMQ插件,用于连接验证 在外部activeMQ服务器中加入验证插件:插件加入地址为activeMQ/lib activeMQ.xml植入的配置文件 < value>http://127.0.0.1:8082/activeMQ/checkSecret</
最新在做ActiveMQ Web端开发时,绕了很多路找到了这个插件,小编在这里就贡献了给爱学习小伙伴用。
第十一章 企业项目开发--消息队列activemq注意:本章代码基于 第十章 企业项目开发--分布式缓存Redis(2)消息队列是分布式系统中实现RP C 的一
最新在做ActiveMQ Web端开发时,绕了很多路找到了这个插件,小编在这里就贡献了给爱学习小伙伴用。
重量整合 该项目为hawtio提供ActiveMQ,Camel,Karaf和Spring Boot插件。安装yarn add @hawtio/integration搭建开发环境克隆存储库git clone https://github.com/hawtio/hawtio-integrationcd hawtio-integration...
MySQL项目管理工具使用Maven、版本控制工具使用GIT、项目自动部署工具使用Jenkins消息中间件使用ActiveMQ、分布式任务调度系统使用XXLJOB、反向代理工具使用Nginx日志管理插件工具使用lombok、分布式日志收集使用...
本系统主要是做基于 Java 的一个智能客服系统,使用 Spring 框架,MySQL 数据库、ActiveMq 消息中间件、Redis 缓存、Elasticsearch 全文搜索等服务,一个智能客服系统包含的开发任务有:主要包括前端的页面开发,...
微信商城+微信公众号开发,该项目根据上海某大型知名电商企业互联网互联网项目,改版而来,使用最新微服务架构技术,页面使用高仿小米界面。功能包含电商模块,会员、SSO、订单、商品、支付、消息、微信、H5和PC、...
最新在做ActiveMQ Web端开发时,发现这个官方给出的ajax测试例子里用到这个js插件, 就在这里免积分贡献了。
Apache Apollo是一个代理服务器,其是在ActiveMQ基础上发展而来的,可以支持STOMP, AMQP, MQTT, ...但是现在,这个插件已经变为开发项目的一部分。MQTT在Apollo中已经不需要其他配置文件或者是第三方插件支持了。
Apache Apollo是一个代理服务器,其是在ActiveMQ基础上发展而来的,可以支持STOMP, AMQP, MQTT, ...但是现在,这个插件已经变为开发项目的一部分。MQTT在Apoll o中已经不需要其他配置文件或者是第三方插件支持了。
#### 模块介绍 > zheng-common Spring+SpringMVC+Mybatis框架集成公共模块,包括公共配置、MybatisGenerator扩展插件、通用BaseService、工具类等。 > zheng-admin 基于bootstrap实现的响应式Material Design...
使用SSM框架开发的一个博客系统,包含的功能大致有: 1.用户注册与激活,激活方式通过邮件激活 2.用户的登录和退出,包括账号登录、手机快捷登录和qq第三方登录 3.用户账号登录和注册时需要输入验证码验证 4.首页...
Spring+SpringMVC+Mybatis框架集成公共模块,包括公共配置、MybatisGenerator扩展插件、通用BaseService、工具类等。 zheng-admin 基于bootstrap实现的响应式Material Design风格的通用后台管理系统,zheng项目所有...
微服务原型 A 具有 Scala、Akka、Spray 和 Camel/ActiveMQ ...SLF4J 日志记录用于使用自定义合并策略创建 JAR 文件的 Sbt 程序集插件接口结构 POST /api/example1/test (Example1Routes)GET /api/example1/done (Exampl
学完SSM框架的同学就可以学习,能让你切身感受到企业级开发环境目标1:掌握二维码生成插件qrious的使用目标2:能够说出微信支付开发的整体思路目标3:能够调用微信支付接口(统一下单)生成支付二维码目标4:
Spring4GWT GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine ...activemq...
Spring4GWT GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine ...activemq...