【问题标题】:Intercept incoming JMS messages to ActiveMQ, reject/approve based on rules拦截传入的 JMS 消息到 ActiveMQ,根据规则拒绝/批准
【发布时间】:2019-08-15 20:51:59
【问题描述】:

ActiveMQ 中是否有一个功能,也许是 Camel,可以执行以下操作?

  • 代理处拦截传入消息
  • 根据任意规则验证标头和/或正文
  • 如果消息未经验证,则向发件人抛出异常,或者..
  • 将无效消息重新路由到“拒绝”队列

【问题讨论】:

    标签: java jms apache-camel activemq


    【解决方案1】:

    您可以使用 ActiveMQ 代理 Camel 组件来拦截代理内的消息并使用 Camel 路由进行路由

    【讨论】:

    • 看起来不错;如果消息验证失败,是否可以将错误/异常返回给生产者?在这种情况下,骆驼路线是什么样的?
    【解决方案2】:

    阅读您的描述,我想您正在尝试将传入消息排队。

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

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

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

    【讨论】:

    • 我应该更清楚;在 broker 中拦截,而不是在消费者中拦截。
    【解决方案3】:

    以下是如何制作传入消息拦截器:
    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;
    }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-19
      • 1970-01-01
      • 1970-01-01
      • 2014-09-27
      • 2017-05-18
      • 2020-05-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多