7.5. 使用消息拦截器


使用 AMQ Core Protocol JMS,您可以截获进入或退出客户端的数据包,允许您审核数据包或过滤消息。拦截器可以更改它们拦截的数据包。这使得拦截器功能强大,但也是一个应谨慎使用的功能。

拦截器必须实施 intercept () 方法,它会返回一个 布尔值。如果返回的值为 true,则消息数据包将继续。如果返回的值为 false,则中止进程,则不会调用其他拦截器,并且不会进一步处理消息数据包。

消息拦截器会透明地发生在主客户端代码中,除了以阻塞发送模式发送传出数据包时。当传出数据包在启用阻塞的情况下发送,且该数据包遇到返回 false 的拦截器时,会将 ActiveMQException 引发给调用者。引发的异常包含拦截器的名称。

您的拦截器必须实施 org.apache.artemis.activemq.api.core.Interceptor 接口。客户端拦截器类及其依赖项必须添加到客户端的 Java 类路径中,才能正确实例化和调用。

package com.example;

import org.apache.artemis.activemq.api.core.Interceptor;
import org.apache.activemq.artemis.core.protocol.core.Packet;
import org.apache.activemq.artemis.spi.core.protocol.RemotingConnection;

public class MyInterceptor implements Interceptor {
    private final int ACCEPTABLE_SIZE = 1024;

    @Override
    boolean intercept(Packet packet, RemotingConnection connection) throws ActiveMQException {
        int size = packet.getPacketSize();
        if (size <= ACCEPTABLE_SIZE) {
            System.out.println("This Packet has an acceptable size.");
            return true;
        }
        return false;
    }
}
Copy to Clipboard Toggle word wrap
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat