Hello, it looks like the broker is not deleting auto-created-addresses that are not bound to a queue. I’m using Artemis 2.18. Wildcards are set as MQTT protocol specifications:
<wildcard-addresses> <routing-enabled>true</routing-enabled> <delimiter>/</delimiter> <any-words>#</any-words> <single-word>+</single-word> </wildcard-addresses> The address configuration is (ttl is quite low for testing purpose): <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-queues>true</auto-delete-queues> <auto-delete-created-queues>true</auto-delete-created-queues> <auto-delete-queues-delay>15000</auto-delete-queues-delay> <auto-delete-queues-message-count>0</auto-delete-queues-message-count> <auto-delete-addresses>true</auto-delete-addresses> <auto-delete-addresses-delay>15000</auto-delete-addresses-delay> I used for my tests MQTT clients and, for example, if there is a subscription like topic1/# and a client publishes to topic1/topic2/topic3 the address and the queue topic1 are deleted after client unsubscribe and disconnect but not the topic1/topic2/topic3 address. To fix this problem I tried to delete “manually” the addresses (using a specific plugin, see the code below), but under load (several messages per second/different topics/connected clients) it looks like there is some message lost. Indeed, MQTT clients published messages count is higher than the messages received count (I have a ServerPlugin that intercepts the beforeSend method to count the received messages) private void cleanAddress(ActiveMQServer server) { long currentTime = System.currentTimeMillis(); server.getPostOffice().getAddresses().forEach(address -> { AddressInfo addressInfo = server.getAddressInfo(address); String addressStr = addressInfo.getName().toString(); logger.debug("Evaluating address: {}", addressInfo.getName()); try { if (addressInfo.getUnRoutedMessageCount()<=unroutedMessagesToDeleteAddress && !server.getPostOffice().isAddressBound(address) && isExpired(addressStr, currentTime)) { server.removeAddressInfo(address, null); logger.debug("Deleted address: {}", addressStr); } } catch (Exception e) { logger.warn("Error deleting address {}", addressStr, e); } }); //is needed?????? server.clearAddressCache(); } private boolean isExpired(String address, long currentTime) { ... } Can someone suggest me the right way to delete addresses (is there a way to lock the address table or synchronize the deletion process) to avoid losing messages? Thank you in advance for your feedback! Riccardo