拦截传入到activemq的jms消息,根据规则拒绝/批准

rnmwe5a2  于 2021-07-13  发布在  Java
关注(0)|答案(3)|浏览(352)

activemq中是否有一个特性(可能是camel)来执行以下操作?
在代理处拦截传入消息
基于任意规则验证标头和/或正文
如果邮件未验证,则向发件人引发异常,或。。
将无效消息重新路由到“拒绝”队列

zzzyeukh

zzzyeukh1#

您可以使用activemq代理camel组件截取代理中的消息,并使用camel路由对它们进行路由
http://activemq.apache.org/broker-camel-component.html

ecr0jaav

ecr0jaav2#

看了你的描述,我猜你是想把收到的信息排成一列。
有一个新的内部类,它实现了messagelistener。编写一个接受某些参数并进行验证的方法。
在onmessage方法中,您可以调用传递适当参数的方法,如果条件满足,则将消息排队,
在父方法中-创建此类的示例并将其设置为setmessagelistener。

jrcvhitl

jrcvhitl3#

下面是如何创建传入消息拦截器:
1.在连接工厂:

ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(url, username, password);
connectionFactory.getServerLocator().setIncomingInterceptorList("com.itsgosho.emails.EmailIncomingInterceptor");

2.在此拦截器中:

@Component
public class EmailIncomingInterceptor implements org.apache.activemq.artemis.api.core.Interceptor {

@Override
public boolean intercept(Packet packet, RemotingConnection connection) throws ActiveMQException {

    if(isMessageReceive(packet)){
        Message message = ((SessionReceiveMessage) packet).getMessage();
        return false;
    }

    return true;
}

private boolean isMessageReceive(Packet packet){
    if (packet instanceof SessionReceiveMessage) {
        SessionReceiveMessage realPacket = (SessionReceiveMessage) packet;
        Message msg = realPacket.getMessage();
        if ((msg.getTimestamp() > 0) && msg.getUserID() != null){
            return true;
        }
    }
    return false;
}
}

相关问题