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

时间:2015-04-28 12:25:07

标签: java jms apache-camel activemq

ActiveMQ中是否有功能(可能是Camel)执行以下操作?

  • 拦截经纪人
  • 上的收到消息
  • 根据任意规则验证标题和/或正文
  • 如果消息未经验证,则
  • 向发件人抛出异常,或..
  • 将无效邮件重新路由到“拒绝”队列

3 个答案:

答案 0 :(得分:3)

您可以使用ActiveMQ代理Camel组件拦截代理中的消息并使用Camel路由路由它们

答案 1 :(得分:0)

阅读您的描述,我认为您正在尝试对传入的消息进行排队。

有一个新的内部类,它实现了MessageListener。编写一个接受某个参数并进行一些验证的方法。

在onMessage方法中,您可以调用传递适当参数的方法,如果条件满足,则对消息进行排队,

在父方法中 - 创建此类的实例并将其设置为setMessageListener。

答案 2 :(得分:0)

以下是制作传入消息拦截器的方法:
1.在您的ConnectionFactory中:

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;
}
}