拦截操作
ActiveMQ支持拦截器。拦截器可以拦截进入服务器的数据包。每进入服务器
一个数据包,拦截器就被调用一次,允许一些特殊和处理,例如对包的审计、过滤等。拦截器可以对数据包
进行改动。
实现拦截器
拦截器必须要实现Interceptor接口:
package org.apache.activemq.api.core.interceptor;
public interface Interceptor
{
boolean intercept(Packet packet, RemotingConnection connection)
throws ActiveMQException;
}
它的方法的返回值是很重要的:
如果返回true,处理正常进行下去。
如果返回false,则处理被中断,其它的拦截器将不会被调用,数据包将不会
被服务器所处理。
配置拦截器
拦截器的配置在activemq-configuration.xml文件中:
<remoting-interceptors>
<class-name>org.apache.activemq.jms.example.LoginInterceptor</class-name>
<class-name>org.apache.activemq.jms.example.AdditionalPropertyInterceptor</class-name>
</remoting-interceptors>
拦截器的类(以及它们依赖的类)必须要在服务器的classpath中,否则不能被正常初始化及调用。
客户端拦截器
在客户端也可以有拦截器来拦截来自服务器的数据包。ClientSessionFactory
的addInterceptor()
方法可以用来添加拦截器。
同样拦截器的类(以及它们依赖的类)必须要在客户端的classpath中,否则它们不能被正常初始化及调用。
例子
参见。这个例子中展示了如何使用拦截器向发往服务器的消息中
添加属性。