From: William M. <wil...@ma...> - 2004-11-16 12:20:14
|
On 15 Nov, 2004, at 1:26 pm, William Moore wrote: > Is it possible to have more than one client listening to a persistent > queue? > I tried using rmi instead. That was much slower and did not fare any > better in managing more than one client. I discovered the difficulty with rmi (and part of the difficulty with http) was running a firewall on the second computer. I turned the firewall off and managed to get two clients started successfully under both rmi and http. However, I now have a different problem under http. I am now only running one client listening to the persistent queue. The queue gets one message (from elsewhere) and the client successfully receives the message and starts processing it. The processing involves submitting a series of new messages back to the queue. During the process of submitting these new messages over an http connection, the server loses contact with the client. Here is an extract from the server log with an http connection: 2004-11-16 11:30:57,505 DEBUG org.exolab.jms.persistence.RDBMSAdapter - addMessageHandle,5 2004-11-16 11:30:57,931 DEBUG org.exolab.jms.persistence.RDBMSAdapter - addMessage,5 2004-11-16 11:30:57,933 DEBUG org.exolab.jms.persistence.MessageHandles - addMessageHandle(handle=[consumer=elease_queue, destination=elease_queue-true, id=ID:07a41af0-bb70-1004-8e98-64f552359569]) 2004-11-16 11:30:57,946 DEBUG org.exolab.jms.persistence.RDBMSAdapter - addMessageHandle,12 2004-11-16 11:30:58,303 DEBUG org.exolab.jms.server.http.HttpJmsSessionSender - Failed to send message to client java.io.IOException: Server returned HTTP response code: 500 for URL: http://172.16.1.3:8080/openjms/OpenJMSClient at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnec tion.java:575) at org.exolab.core.http.HttpClient.sendMessage(HttpClient.java:288) at org.exolab.core.http.HttpClient.send(HttpClient.java:141) at org.exolab.jms.server.http.HttpJmsSessionSender.onMessage(HttpJmsSession Sender.java:149) at org.exolab.jms.server.JmsServerSession.onMessage(JmsServerSession.java: 942) at org.exolab.jms.messagemgr.QueueConsumerEndpoint.deliverMessages(QueueCon sumerEndpoint.java:177) at org.exolab.jms.messagemgr.ConsumerEndpoint.run(ConsumerEndpoint.java: 425) at org.exolab.core.threadPool.ThreadPoolWorker.runIt(ThreadPoolWorker.java: 191) at org.exolab.core.threadPool.ThreadPoolWorker.runWork(ThreadPoolWorker.jav a:178) at org.exolab.core.threadPool.ThreadPoolWorker.access$000(ThreadPoolWorker. java:67) at org.exolab.core.threadPool.ThreadPoolWorker$1.run(ThreadPoolWorker.java: 122) at java.lang.Thread.run(Thread.java:491) 2004-11-16 11:30:58,327 DEBUG org.exolab.jms.server.JmsServerSession - close() [sessionId=077a691c-bb70-1004-896d-141fa4dff4fd] 2004-11-16 11:30:58,328 DEBUG org.exolab.jms.messagemgr.ConsumerManager - deleteConsumerEndpoint(consumer=[clientId=1, destination=elease_queue-true, session=[sessionId=077a691c-bb70-1004-896d-141fa4dff4fd]]) 2004-11-16 11:30:58,332 DEBUG org.exolab.jms.messagemgr.ConsumerManager - removeFromConsumerCache(name=077c7234-bb70-1004-896d-141fa4dff4fd) 2004-11-16 11:30:58,334 ERROR org.exolab.jms.messagemgr.QueueConsumerEndpoint - org.exolab.jms.server.ClientDisconnectionException: Server returned HTTP response code: 500 for URL: http://172.16.1.3:8080/openjms/OpenJMSClient org.exolab.jms.server.ClientDisconnectionException: Server returned HTTP response code: 500 for URL: http://172.16.1.3:8080/openjms/OpenJMSClient at org.exolab.jms.server.http.HttpJmsSessionSender.onMessage(HttpJmsSession Sender.java:155) at org.exolab.jms.server.JmsServerSession.onMessage(JmsServerSession.java: 942) at org.exolab.jms.messagemgr.QueueConsumerEndpoint.deliverMessages(QueueCon sumerEndpoint.java:177) at org.exolab.jms.messagemgr.ConsumerEndpoint.run(ConsumerEndpoint.java: 425) at org.exolab.core.threadPool.ThreadPoolWorker.runIt(ThreadPoolWorker.java: 191) at org.exolab.core.threadPool.ThreadPoolWorker.runWork(ThreadPoolWorker.jav a:178) at org.exolab.core.threadPool.ThreadPoolWorker.access$000(ThreadPoolWorker. java:67) at org.exolab.core.threadPool.ThreadPoolWorker$1.run(ThreadPoolWorker.java: 122) at java.lang.Thread.run(Thread.java:491) 2004-11-16 11:30:58,347 DEBUG org.exolab.jms.persistence.RDBMSAdapter - addMessage,6 2004-11-16 11:30:58,349 DEBUG org.exolab.jms.persistence.MessageHandles - addMessageHandle(handle=[consumer=elease_queue, destination=elease_queue-true, id=ID:07a4b730-bb70-1004-8e98-64f552359569]) This looks to me as if the server is attempting to send the first new message back to the client before the client has finished processing the original message and failing to do so. It then attempts to close the client and fails to do that as well. When the client then attempts to close itself later, that also fails. Here is the server log from that: 2004-11-16 11:33:27,715 DEBUG org.exolab.jms.server.mipc.IpcJmsSessionConnection - Failed to locate session=077a691c-bb70-1004-896d-141fa4dff4fd and the clients gets this error from the server: javax.jms.JMSException: Failed to process request stopMessageDelivery: session not found <<no stack trace available>> Everything works as I expect when using an rmi connection. Do I need to set the http connection up differently so it operates as I expect? Thanks in advance. William |