-
插件分为System Plugin,Amq plugin,user plugin三类
-
System Plugin:AciveMQ 内部使用 Plugin 机制实现的一些系统功能,用户不能定制;
-
AMQ Plugin”: ActiveMQ 已经实现好了,可以在配置文件中自由选择的一些插件,例如简单的安全插件和 JAAS 安全插件;
-
USER Plugin:用户自己实现的 ActiveMQ 插件,需要用户把相关 jar 包放入到 ActiveMQ 的启动 classpath 中,并在配置文件中进行配置才能正确加载
USER Plugin:
-
plugin类先实现BrokerPlugin,在installPlugin里调用实现功能类
-
功能类继承BrokerFilter写构造函数。然后重写里面需要的方法
-
BrokerFilter这个类中的方法决定了插件能实现的功能,比如连接建立、连接断开、消息到达、消息过期、日志记录等等都可以自定义操作。
-
连接建立(addConnection),连接断开(removeConnection),消息到达(send),messageDelivered(消息过期)
-
连接建立时可以做自定义安全验证(基于登陆名和密码),有jdbc连接,目前使用的。
https://blog.csdn.net/yzh_1346983557/article/details/85071244
注入jdbcTemplate,需要在activemq.xml的beans标签里添加jdbcTemplate,如下:
然后在节点中的最后添加配置:
使用:User user = jdbcTemplate.queryForObject(sql, new Object[]{username}, new BeanPropertyRowMapper(User.class))。
https://my.oschina.net/u/2935623/blog/2980927
和redis结合使用的
先在过滤器里添加JedisPool属性,添加getset方法
然后在功能实现类里:
具体使用就是通过name获取redis里的token,和登陆时使用的token是否一致来判断。
- 可以拦截固定的ip地址
https://blog.csdn.net/qq_33394088/article/details/77627842
String remoteAddress = context.getConnection().getRemoteAddress()
然后匹配设定的正则表达式。可以实现拦截
消息到达(send)
重写send方法可以实现对消息的筛选,例如上行消息和下行消息。参数有Message和ProducerBrokerExchange。Message指activemq的消息,里面的getProperty(string name)可以用来获取指定属性的内容,返回值是object。这个方法其实是在properties里取到对应的值,里面是键值对。这样就可以实现筛选
https://www.jianshu.com/p/9b821e6894b7
https://www.jianshu.com/p/c73eb072daf9
常见类和层级关系:
ProducerBrokerExchange ConnectionContext Destination**,**ProducerState ProducerInfo ProducerId SessionId ConnectionId
消息过期:
cerInfo ProducerId SessionId ConnectionId
消息过期:
http://www.blogjava.net/zhuanggl/archive/2010/07/14/326119.html