Hi,

I've experienced some strange behavior during trying to experiment with Apache 
Camel 4.0 SJMS2 and Wildfly 29.0.1-1 and Apache ActiveMQ Artemis: I see 
zillions of logs below if messages are sent to JMS endpoint with a given rate 
(heavily parallel execution)...

<warning> AMQ212051: Invalid concurrent session usage. Sessions are not 
supposed to be used by more than one thread concurrently. 
java.lang.Exception: trace
  
mailto:org.apache.activemq.artemis@2.26.0//org.apache.activemq.artemis.core.client.impl.ClientSessionImpl.startCall(ClientSessionImpl.java:1587)
  
mailto:org.apache.activemq.artemis@2.26.0//org.apache.activemq.artemis.core.client.impl.ClientSessionImpl.acknowledge(ClientSessionImpl.java:1209)
  
mailto:org.apache.activemq.artemis@2.26.0//org.apache.activemq.artemis.core.client.impl.ClientConsumerImpl.doAck(ClientConsumerImpl.java:1138)
  
mailto:org.apache.activemq.artemis@2.26.0//org.apache.activemq.artemis.core.client.impl.ClientConsumerImpl.acknowledge(ClientConsumerImpl.java:785)
  
mailto:org.apache.activemq.artemis@2.26.0//org.apache.activemq.artemis.core.client.impl.ClientMessageImpl.acknowledge(ClientMessageImpl.java:136)
  
mailto:org.apache.activemq.artemis@2.26.0//org.apache.activemq.artemis.core.client.impl.ClientMessageImpl.acknowledge(ClientMessageImpl.java:38)
  
mailto:org.apache.activemq.artemis@2.26.0//org.apache.activemq.artemis.jms.client.JMSMessageListenerWrapper.onMessage(JMSMessageListenerWrapper.java:136)
  
mailto:org.apache.activemq.artemis@2.26.0//org.apache.activemq.artemis.core.client.impl.ClientConsumerImpl.callOnMessage(ClientConsumerImpl.java:1001)
  
mailto:org.apache.activemq.artemis@2.26.0//org.apache.activemq.artemis.core.client.impl.ClientConsumerImpl$Runner.run(ClientConsumerImpl.java:1154)
  
org.apache.activemq.artemis.journal//org.apache.activemq.artemis.utils.actors.OrderedExecutor.doTask(OrderedExecutor.java:56)
   ... 5 more

Here we can see some stack traces with SJMS origins:
[L] 2023-12-07T14:19:07.838000000Z <warning> 
[org.apache.activemq.artemis.core.client]: [THR-11201] [CID-A1298BD202] 
AMQ212051: Invalid concurrent session usage. Sessions are not supposed to be 
used by more than one thread concurrently.java.lang.Exception: trace
  
mailto:org.apache.activemq.artemis@2.26.0//org.apache.activemq.artemis.core.client.impl.ClientSessionImpl.startCall(ClientSessionImpl.java:1587)
  
mailto:org.apache.activemq.artemis@2.26.0//org.apache.activemq.artemis.core.client.impl.ClientSessionImpl.queueQuery(ClientSessionImpl.java:781)
  
mailto:org.apache.activemq.artemis@2.26.0//org.apache.activemq.artemis.jms.client.ActiveMQSession.checkDestination(ActiveMQSession.java:411)
  
mailto:org.apache.activemq.artemis@2.26.0//org.apache.activemq.artemis.jms.client.ActiveMQSession.createProducer(ActiveMQSession.java:375)
  
deployment.db.connector-10.0.0-artemis-SNAPSHOT.war//org.apache.camel.component.sjms2.jms.Jms2ObjectFactory.createMessageProducer(Jms2ObjectFactory.java:217)
  
deployment.db.connector-10.0.0-artemis-SNAPSHOT.war//org.apache.camel.component.sjms2.jms.Jms2ObjectFactory.createMessageProducer(Jms2ObjectFactory.java:209)
  
deployment.db.connector-10.0.0-artemis-SNAPSHOT.war//org.apache.camel.component.sjms.consumer.EndpointMessageListener$1.doInJms(EndpointMessageListener.java:289)
  
deployment.db.connector-10.0.0-artemis-SNAPSHOT.war//org.apache.camel.component.sjms.SjmsTemplate.execute(SjmsTemplate.java:114)
  
deployment.db.connector-10.0.0-artemis-SNAPSHOT.war//org.apache.camel.component.sjms.consumer.EndpointMessageListener.sendReply(EndpointMessageListener.java:304)
  
deployment.db.connector-10.0.0-artemis-SNAPSHOT.war//org.apache.camel.component.sjms.consumer.EndpointMessageListener$EndpointMessageListenerAsyncCallback.done(EndpointMessageListener.java:448)
   ... 19 more

[L] 2023-12-07T14:19:07.839000000Z <warning> 
[org.apache.activemq.artemis.core.client]: [THR-11152] [CID-23EB726581] 
AMQ212051: Invalid concurrent session usage. Sessions are not supposed to be 
used by more than one thread concurrently.java.lang.Exception: trace
  
mailto:org.apache.activemq.artemis@2.26.0//org.apache.activemq.artemis.core.client.impl.ClientSessionImpl.startCall(ClientSessionImpl.java:1587)
  
mailto:org.apache.activemq.artemis@2.26.0//org.apache.activemq.artemis.core.client.impl.ClientProducerImpl.doSend(ClientProducerImpl.java:216)
  
mailto:org.apache.activemq.artemis@2.26.0//org.apache.activemq.artemis.core.client.impl.ClientProducerImpl.send(ClientProducerImpl.java:140)
  
mailto:org.apache.activemq.artemis@2.26.0//org.apache.activemq.artemis.core.client.impl.ClientProducerImpl.send(ClientProducerImpl.java:122)
  
mailto:org.apache.activemq.artemis@2.26.0//org.apache.activemq.artemis.jms.client.ActiveMQMessageProducer.doSendx(ActiveMQMessageProducer.java:481)
  
mailto:org.apache.activemq.artemis@2.26.0//org.apache.activemq.artemis.jms.client.ActiveMQMessageProducer.send(ActiveMQMessageProducer.java:192)
  
deployment.db.connector-10.0.0-artemis-SNAPSHOT.war//org.apache.camel.component.sjms.SjmsTemplate.send(SjmsTemplate.java:199)
  
deployment.db.connector-10.0.0-artemis-SNAPSHOT.war//org.apache.camel.component.sjms.consumer.EndpointMessageListener$1.doInJms(EndpointMessageListener.java:290)
  
deployment.db.connector-10.0.0-artemis-SNAPSHOT.war//org.apache.camel.component.sjms.SjmsTemplate.execute(SjmsTemplate.java:114)
  
deployment.db.connector-10.0.0-artemis-SNAPSHOT.war//org.apache.camel.component.sjms.consumer.EndpointMessageListener.sendReply(EndpointMessageListener.java:304)
   ... 20 more


Excerpt from relevant code:
JmsRoute.java:
package com.yyy.zzz

import org.apache.camel.ExchangePattern;

public class JmsRoute extends AbstractInternalRouteBuilder {

  static final String ROUTE_ID = "JmsRoute";
  public static final String JMS_ROUTE_ENDPOINT = "direct:jms";
  private static final String JMS_ENDPOINT = "sjms2:zzz_request_queue";
  private static final String JMS_REPLY_QUEUE = "zzz_reply_queue";
  
  public JmsRoute() {}

  @Override
  public void configureErrorHandling() throws Exception {}

  @Override
  public void configureRoutes() throws Exception {
    from(JMS_ROUTE_ENDPOINT)
        .routeId(ROUTE_ID)
        .to(ExchangePattern.InOut, createJmsProducerUri())
        .end();

    from(createJmsConsumerUri())
        .routeId(ROUTE_ID + "JmsQueue")
        .to(<<<wherever>>>)
        .end();
  }

  private String createJmsProducerUri() {
    String uri =
        String.format(
            
"%s?replyTo=db_reply_queue&replyToType=Exclusive&deliveryPersistent=false&replyToConcurrentConsumers=%s&deliveryMode=1&requestTimeout=%s&timeToLive=%s",
            JMS_ENDPOINT,
            config.jmsRequestQueues(),
            config.requestTimeout(),
            config.requestTimeout());
    // 
"sjms2:db_request_queue?replyTo=db_reply_queue&replyToType=Exclusive&deliveryPersistent=false&replyToConcurrentConsumers=4&deliveryMode=1&requestTimeout=2000&timeToLive=1600";
    return uri;
  }

  private String createJmsConsumerUri() {
    String uri =
        String.format(
            
"%s?asyncConsumer=true&replyToDeliveryPersistent=false&concurrentConsumers=%s",
            JMS_ENDPOINT, config.jmsResponseQueues());
    return uri;
  }
}


It is used from:
  @Override
  public void configureRoutes() throws Exception {
    from(OperationEndpoints.XXX_ROUTE)
        .routeId(ROUTE_ID)
        .process(requestBuilder)
        .to(JmsRoute.JMS_ROUTE_ENDPOINT)
        .process(answerProcessor)
        .end();
  }

Any help/hint is more than welcome and thanks in advance.

Br,



Reply via email to