Sergey, See: http://cwiki.apache.org/CXF20DOC/using-the-jmsconfigfeature.html
There is a setting for concurrentConsumers and maxConcurrentConsumers. Dan On Monday 17 November 2008 9:35:44 am Sergey Beryozkin wrote: > Now that I believe I understand the reason for these transient failuires, > it was very easy to update the test to have the control threads spawned by > the actual server endpoint code. > In other words, my JMS continuations test has been originally written the > same way the HTTP one has been done. Control threads invoke on a service > endpoint and wait till they're told that the main user threads have invoked > on say helloService.sayHi() and have called cont.suspend(), so what they do > next is call helloService.resume() which results in a given suspended > continuation be resumed. > > For JMS this model simply does not walk for me at the moment due to the > fact that multiple consumer threads sharing the same client proxy end up > sharinh the same JMS connection too with the connection factory transiently > allocating a number of threads capable of utilizing that connection, as per > the traces I posted earlier. I'm sure this can be solved somehow and I'd > love to know how, but in meantime I've updated the server endpoint code to > do 'local' control threads, which works quite well... > > Cheers, Sergey > > > ----- Original Message ----- > From: "Sergey Beryozkin" <[EMAIL PROTECTED]> > To: <[email protected]> > Sent: Monday, November 17, 2008 12:30 PM > Subject: Re: JMS queues and multiple consumer threads > > > Looking at the traces again, I think the problem might be to do with the > > spring connection factory > > > > For ex, this a trace for a failing test with 2 threads involved > > > >>> 14000 [pool-1-thread-1] INFO > >>> org.springframework.jms.connection.SingleConnectionFactory - > >>> Established shared JMS Connection: > > > > and here's the trace for a green test : > >> 14594 [pool-1-thread-2] INFO > >> org.springframework.jms.connection.SingleConnectionFactory - Established > >> shared JMS Connection: > > > > So I guess what happens is that if in my test the thread which expects > > the notification from the other thread squeezes in first, then it > > actually is never awaken (it does hit the application code though), while > > the other one is waiting on the client side. > > > > So I guess the question is how to configure a client side connection > > factory's thread pool ? > > > > Thanks, Sergey > > > >> Hi > >> > >> I have a system JMS test which involves multiple consumer threads > >> hitting a single provider endpoint which is a JMS queue and expecting > >> some response. > >> > >> If more than 1 consumer thread is involved than I can often see a server > >> side being unable even to get a given invocation to the endpoint > >> application code. > >> > >> For ex, with 2 threads involved, here's a failed test : > >> > >> // S.B - this is happening on the consumer side I believe : > >> > >> 14000 [pool-1-thread-1] INFO > >> org.springframework.jms.connection.SingleConnectionFactory - Established > >> shared JMS Connection: ActiveMQConnection > >> {id=ID:sberyoz-4729-1226923006536-1:1,clientId=null,started=false} > >> > >> // S.B : I added these printlns : > >> Receieve timeout******** : 500000 > >> Receieve timeout******** : 500000 > >> //S.B This is a server side now > >> 17-Nov-2008 11:56:48 org.apache.cxf.transport.jms.JMSDestination > >> onMessage FINE: server received request: > >> 17-Nov-2008 11:56:48 org.apache.cxf.transport.jms.JMSDestination > >> onMessage FINE: The Request Message is [ [EMAIL PROTECTED] > >> > >> and this is basically, the println in an application code is not even > >> hit. > >> > >> Now, same test with 2 threads succeeding : > >> > >> // S.B. : client side > >> > >> 14594 [pool-1-thread-2] INFO > >> org.springframework.jms.connection.SingleConnectionFactory - Established > >> shared JMS Connection: ActiveMQConnection > >> {id=ID:sberyoz-4775-1226923455594-1:1,clientId=null,started=false} > >> Receieve timeout******** : 500000 > >> Receieve timeout******** : 500000 > >> // S.B. The first thread has managed to get through > >> 7-Nov-2008 12:04:17 org.apache.cxf.transport.jms.JMSDestination > >> onMessage INFO: The Request Message is [ [EMAIL PROTECTED] > >> Getting continuation for Fred > >> Suspending invocation for Fred > >> Request message has been suspended > >> .... > >> > >> // S.B the second one is lucky too > >> 17-Nov-2008 12:04:17 org.apache.cxf.transport.jms.JMSDestination > >> onMessage INFO: The Request Message is [ [EMAIL PROTECTED] > >> Invocation for Fred has been suspended > >> > >> Can someone help me to figure why I'm seeing this transient behaviour ? > >> > >> here's a wsdl configuration (which I copied from the other test's wsdl) > >> shared by all the consumer threads and by the provider endpoint : > >> > >> <service name="HelloContinuationService"> > >> <port binding="tns:HelloContinuationServiceSoapBinding" > >> name="HelloContinuationPort"> <jms:clientConfig > >> clientReceiveTimeout="500000" messageTimeToLive="500000"/> > >> <jms:serverConfig messageTimeToLive="500000"/> > >> <jms:address > >> jndiConnectionFactoryName="ConnectionFactory" > >> jndiDestinationName="dynamicQueues/test.jmstransport.text"> > >> <jms:JMSNamingProperty name="java.naming.factory.initial" > >> value="org.apache.activemq.jndi.ActiveMQInitialContextFactory"/> > >> <jms:JMSNamingProperty name="java.naming.provider.url" > >> value="tcp://localhost:61500"/> </jms:address> > >> <jms:server durableSubscriberName="CXF_subscriber"/> > >> </port> > >> </service> > >> > >> Thanks, Sergey -- Daniel Kulp [EMAIL PROTECTED] http://dankulp.com/blog
