Как очистить очереди утешения без использования сообщений? - PullRequest
0 голосов
/ 17 мая 2019

Я пытался найти похожий вопрос, но не смог найти наилучшего возможного решения для моей проблемы. Я использую весеннюю загрузку в своем приложении и интегрировал очереди утешения в своем коде. Я могу читать сообщения из очередей утешения, используя следующий фрагмент кода:

@Configuration
public class JmsConfig {
    @Bean
    public ConnectionFactory connectionFactory() {
        return new PoolingConnectionFactoryBean();
    }
}

С помощью весенней загрузки все свойства, такие как VPN, выбираются из файла свойств, и создается ConnectionFactory. Ниже приведен код для чтения сообщений:

@Configuration
public class QueueConfig {
    @Value("${destination.name}")
    private String destination;
    @Value("${destination.isPubSub:false}")
    private boolean pubSubDomain;
    @Value("${maxConsumers:1}")
    private int maxConsumers;
    @Value("${destination.autoStartup:true}")
    private boolean autoStartup;

    @Bean
    public IntegrationFlow queueFlow(ConnectionFactory jmsConnectionFactory, PlatformTransactionManager transactionManager) {
        return IntegrationFlows
                .from(Jms.messageDrivenChannelAdapter(jmsConnectionFactory).autoStartup(autoStartup)
                        .configureListenerContainer(
                                c -> c.transactionManager(transactionManager).pubSubDomain(pubSubDomain).maxConcurrentConsumers(maxConsumers))
                        .destination(destination))
                .transform(Transformers.fromJson(HashMap[].class)).log(LoggingHandler.Level.INFO, m -> MessageFormat
                        .format("Processing {0} {1} records...", ((Object[]) m.getPayload()).length, m.getHeaders().get("table")))
                .route(getTableRouter()).get();

    }

    private ExpressionEvaluatingRouter getTableRouter() {
        ExpressionEvaluatingRouter router = new ExpressionEvaluatingRouter("headers['table']");
        router.setResolutionRequired(false);
        router.setDefaultOutputChannel(new NullChannel());
        return router;
    }

В зависимости от типа сообщения, сервисный исполнительный механизм находится и сообщение обрабатывается. У нас это работает отлично.

Однако в некоторых ситуациях нам нужно быстро удалять буферные сообщения из очереди, не используя их. Есть ли способ, которым мы можем сделать это в текущей настройке, о которой я упоминал здесь.

Я пробовал через браузер очереди, но там нет такой опции

1 Ответ

0 голосов
/ 20 мая 2019

Сам JMS не определяет метод для «очистки очереди без использования сообщений».Этот тип операции оставлен на усмотрение провайдерского API администратора.Лучше всего использовать их с JMS и просто не обрабатывать их.

Я думаю, API администрирования Solace SEMP определяет удаление объектов, но не выполняет быструю очистку.Может быть, пересоздание очереди будет работать, но это не будет красиво.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...