Пустая очередь не удаляется автоматически в ActiveMQ Artemis

Мой Java-код:

ArtemisContext artemisContext = WrapperContext.getInstance().getArtemisContext();
ClientSession session = artemisContext.getSession();

String myQueue = WrapperContext.getInstance().getMyId();
try {
    session.createQueue(myQueue, RoutingType.ANYCAST, myQueue,false);
} catch (Exception e) {
    //ignore
}
ClientConsumer consumer = session.createConsumer(myQueue);
consumer.setMessageHandler(message -> {
    ActiveMQBuffer bodyBuffer = message.getBodyBuffer();
    byte[] bytes = new byte[bodyBuffer.readableBytes()];
    try {
        bodyBuffer.readFully(bytes);
    } catch (IOException e) {
        e.printStackTrace();
    }
    String msg = new String(bytes);
    message.getBodyBuffer().writeBytes(msg.getBytes());
    log.info("=====comsume:" + msg);
    listenerHandler.handler(msg);
});
WrapperContext.getInstance().getArtemisContext().setConsumer(consumer);

Когда я запускаю свое Java-приложение, я вызываю этот код и создаю очередь в ActiveMQ Artemis следующим образом:

И мой broker.xml для ActiveMQ Artemis:

<address-settings>
   <!-- if you define auto-create on certain queues, management has to be auto-create -->
   <address-setting match = "activemq.management#">
      <dead-letter-address>DLQ</dead-letter-address>
      <expiry-address>ExpiryQueue</expiry-address>
      <redelivery-delay>0</redelivery-delay>
      <!-- with -1 only the global-max-size is in use for limiting -->
      <max-size-bytes>-1</max-size-bytes>
      <message-counter-history-day-limit>10</message-counter-history-day-limit>
      <address-full-policy>PAGE</address-full-policy>
      <auto-create-queues>true</auto-create-queues>
      <auto-create-addresses>true</auto-create-addresses>
      <auto-create-jms-queues>true</auto-create-jms-queues>
      <auto-create-jms-topics>true</auto-create-jms-topics>
   </address-setting>
   <!--default for catch all-->
   <address-setting match = "#">
      <dead-letter-address>DLQ</dead-letter-address>
      <expiry-address>ExpiryQueue</expiry-address>
      <redelivery-delay>0</redelivery-delay>
      <!-- with -1 only the global-max-size is in use for limiting -->
      <max-size-bytes>-1</max-size-bytes>
      <message-counter-history-day-limit>10</message-counter-history-day-limit>
      <address-full-policy>PAGE</address-full-policy>
      <auto-create-queues>true</auto-create-queues>
      <auto-create-addresses>true</auto-create-addresses>
      <auto-create-jms-queues>true</auto-create-jms-queues>
      <auto-create-jms-topics>true</auto-create-jms-topics>
      <auto-delete-addresses>true</auto-delete-addresses>
      <auto-delete-addresses-delay>0</auto-delete-addresses-delay>
      <auto-delete-queues>true</auto-delete-queues>
      <auto-delete-queues-delay>0</auto-delete-queues-delay>
   </address-setting>
</address-settings>

Я настроил очереди автоматического удаления как true. Я думал, что очередь автоматически удалит его, когда я выключу свой сервис. Но после того, как я отключил сервис, очередь все еще существует, хотя сообщений в ней нет, а потребитель равен 0, а Durable=false

Сначала я подумал, что это из-за RoutingType.MULTICAST, поэтому поменял его на ANYCAST, но результат остался тот же.

Так что-то не так с моим кодом или что-то не так с конфигурацией?

Моя версия ActiveMQ Artemis — 2.17.0.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
59
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Брокер будет автоматически удалять только те очереди, которые были помечены как автоматически созданные. Очередь, которую вы создаете, не помечается как созданная автоматически, поскольку вы создаете ее вручную (т. е. брокер не создает ее автоматически для вас) и вы не настраиваете ее как созданную автоматически. Попробуйте сделать это вместо этого:

session.createQueue(myQueue, RoutingType.ANYCAST, myQueue, null, false, true);

Также я настоятельно рекомендую вам обновиться до последней версии. Версия 2.17.0 была выпущена в начале 2021 года более трех лет назад. С тех пор вышло 15 выпусков с множеством исправлений ошибок и новыми функциями (включая новый createQueue API, более гибкий и понятный).

Другие вопросы по теме

Похожие вопросы

Ошибка JMeter JMS Publisher при попытке публикации в очереди ActiveMQ Artemis: java.lang.NoSuchMethodError: javax.jms.Message.setJMSDeliveryTime(J)V
Как настроить сервер ActiveMQ Artemis для взаимодействия сообщений через разные протоколы AMQP и Openwire
Как настроить ActiveMQ Artemis для использования AMQP 1.0 и других протоколов с Java
Метод аутентификации настраиваемого диспетчера безопасности не вызывается, когда вbroker.xml настроены кластерные соединения
JMeter JMS Publisher: получение JMSMessageId (сгенерированного во время выполнения) в заголовке и использование его в качестве значения другого свойства JMS перед публикацией
Указанный размер кадра 4381 больше максимального размера кадра SASL 4096 при подключении к серверу ActiveMQ Artemis
ActiveMQ Artemis: адрес Muticast доставляет сообщения непоследовательно
Распределение потребительских подключений ActiveMQ Artemis
Имитация классического дуплексного транспорта с федерацией в Артемиде?
Кластер ActiveMQ Artemis HA с использованием общего хранилища в Windows