Я пытаюсь переместить сообщение из очереди 1 (очередь недоставленных писем) в очередь 2 в активном MQ с периодическим интервалом в 5 минут с использованием маршрутизатора Camel. Я использую приведенный ниже код для достижения этого: -
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) в очередь1 (Consumer.OUTDOCS.VirtualTopic.queue1). Но если сообщение отравлено, оно снова возвращается в DLQ, и маршрутизация снова перемещает сообщение из DLQ в обычную очередь, и этот процесс продолжает работать бесконечно.
Мое требование состоит в том, что маршрутизация должна перемещать сообщение только один раз из DLQ в очередь каждые 5 минут? если приходит сообщение об отравлении, оно должно проверяться только через 5 минут.