0

Camel ルーターを使用して、5 分間隔でアクティブな MQ のキュー 1 (デッド レター キュー) からキュー 2 にメッセージを移動しようとしています。これを達成するために以下のコードを使用しています:-

    public class MessageRouteBuilder extends RouteBuilder {

    private static final Logger LOG =
            LoggerFactory.getLogger(MessageRouteBuilder.class);

    /*
     * (non-Javadoc)
     * 
     * @see org.apache.camel.builder.RouteBuilder#configure()
     */
    @Override
    public void configure() throws Exception {
        LOG.info("Routing of camel is started");
        CronScheduledRoutePolicy startPolicy = new CronScheduledRoutePolicy();
        startPolicy.setRouteStartTime("0 0/5 * * * ?");

        from(
            "jms:queue:DLQ.Consumer.OUTDOCS.VirtualTopic.queue1")
                .routeId("DLQMessageMoverID").routePolicy(startPolicy)
                .noAutoStartup()
                .to("jms:queue:Consumer.OUTDOCS.VirtualTopic.queue1");
        LOG.info("Routing of camel is done");

    }

}


@Startup
@Singleton
public class ScheduledMessageDLQConsumer {

    @Inject
    private MessagingUtil msgUtil;

    @Inject
    private MessageRouteBuilder builder;

    private static final Logger LOG =
            LoggerFactory.getLogger(ScheduledMessageDLQConsumer.class);
    @PostConstruct
    public void init() {
        LOG.info("camel Scheduling scheduled started");
        CamelContext camelContext = new DefaultCamelContext();
        ConnectionFactory connectionFactory = msgUtil.getAMQConnectionFactory();
        camelContext.addComponent("jms", JmsComponent.jmsComponentAutoAcknowledge(connectionFactory));

        try {
            camelContext.addRoutes(builder);
            camelContext.start();
            LOG.info("Camel scheduling completed");
        } catch (Exception e) {
            // TODO Auto-generated catch block

            LOG.error("Error in registering camel route builder", e);
        }

        LOG.info(" camel Scheduling scheduled completed");
    }

}

ここでの問題は次のとおりです。- キャメル ルーティングが 5 分後に有効になります。メッセージを DLQ (DLQ.Consumer.OUTDOCS.VirtualTopic.queue1) から queue1 (Consumer.OUTDOCS.VirtualTopic.queue1) に移動します。しかし、メッセージが poison の場合、メッセージは再び DLQ に戻り、ルーティングによってメッセージが DLQ から通常のキューに移動され、このプロセスは無限に実行され続けます。

私の要件は、ルーティングが 5 分ごとにメッセージを DLQ からキューに 1 回だけ移動する必要があることです。有害なメッセージが表示された場合は、5 分後に確認する必要があります。

4

1 に答える 1