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