Have you tried this on the latest release (i.e. 2.30.0)? The 2.18.0 release is fairly old at this point. A lot has changed with MQTT support since then. Many bugs have been fixed and support for MQTT 5 was added in 2.21.0.
Justin On Wed, Aug 2, 2023 at 10:24 AM Modanese, Riccardo <riccardo.modan...@eurotech.com.invalid> wrote: > 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 > > >