[ https://issues.apache.org/jira/browse/ARTEMIS-2375?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17528273#comment-17528273 ]
Kyle commented on ARTEMIS-2375: ------------------------------- Hi [~cshannon], is this still on your radar? I'm interested in the wildcard consumer functionality as well and I couldn't find the new Jira issue you mentioned creating above. > JMS, Wildcard destination consumer, and Acknowledgements going to wrong queue > ----------------------------------------------------------------------------- > > Key: ARTEMIS-2375 > URL: https://issues.apache.org/jira/browse/ARTEMIS-2375 > Project: ActiveMQ Artemis > Issue Type: Bug > Affects Versions: 2.9.0 > Reporter: Craig Schmidt > Assignee: Justin Bertram > Priority: Major > > I have an ActiveMQ server set up where I have multiple (and unbounded) queues > which differ only in the last component. e.g. myqueue.1, myqueue.2, > myqueue.4, etc. The last component is from a database that will have a > varying set of customers defined - and I want to set up one queue for each > customer. (I want a separate queue - the third party we're talking to needs > throttling at our 'customer' level. > The address setting looks like this in broker.xml: > {code:xml} > <address-setting match="myqueue.#"> > <dead-letter-address>myqueue.DLQ</dead-letter-address> > <expiry-address>myqueue.ExpiryQueue</expiry-address> > <redelivery-delay>500</redelivery-delay> > <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> > <max-delivery-attempts>3</max-delivery-attempts> > </address-setting> > {code} > I have a producer that creates the queue name based on the customer key, and > uses JmsMessagingTemplate.convertAndSent(queueName, message). I have a > consumer annotated like this: > {code:java} > @JmsListener(destination = "myqueue.#", containerFactory = > "throttledLongCodeFactory") > public void processLongCodeMessage1(Session session, Message<MessageRequest> > message) throws JMSException { > //... do the message handling - no ActiveMQ accesses in here... > session.commit(); > } > {code} > FWIW, here's the code for the throttledLongCodeFactory: > {code:java} > @Bean public DefaultJmsListenerContainerFactory > throttledLongCodeFactory(DefaultJmsListenerContainerFactoryConfigurer > configurer) { > ActiveMQConnectionFactory connectionFactory = > createActiveMQConnectionFactory(); > // For throttling. Used to limit the number of messages a consumer will > handle per second. Default is -1. > Integer maxConsumerRate = > appProperties.getArtemis().getLongCode().getMaxConsumerRate(); > if (maxConsumerRate != null) { > connectionFactory.setConsumerMaxRate(maxConsumerRate); > } > // This provides all boot's default to this factory, including the message > converter > DefaultJmsListenerContainerFactory factory = new > DefaultJmsListenerContainerFactory(); > configurer.configure(factory, connectionFactory); > return factory; > } > {code} > What I'm finding in looking at the ActiveMQ Management Console is that the > consumer ACK's are going to a (new) queue "myqueue.#" (i.e. literally has the > '#' in the name), rather than the actual source queue for each message. In > the consumer, I can see the actual source queue name (e.g. "myqueue.2") by > inspecting the ClientMessageImpl field 'address'. What I'd like is for the > ACK's to go to the source queue. the way it is, my specific queues are just > building up the number of messages they contain, which isn't doing the > Artemis server memory any good. -- This message was sent by Atlassian Jira (v8.20.7#820007)