Hi Alex, glad to hear that and thanks for sharing your findings back.
Cheers -- Dejan Bosanac - http://twitter.com/dejanb Open Source Integration - http://fusesource.com/ ActiveMQ in Action - http://www.manning.com/snyder/ Blog - http://www.nighttale.net On Fri, Jul 9, 2010 at 3:58 PM, Alex Dean <ad...@meteostar.com> wrote: > I've discovered my problem stems from Apache's proxy configuration, not from > ActiveMQ itself. > > When I loaded the HTML test page directly from ActiveMQ/Jetty, rather than > from Apache, the example ajax scripts worked perfectly. They only failed > when I loaded the HTML from Apache, and let Apache proxy my ajax requests > back to ActiveMQ. > > I think the problem was that the JSESSIONID cookie was not being modified > correctly. ActiveMQ set the cookie for 'path=/demo', while the URL which > was seen by clients was /amq. So on subsequent requests, the client would > not send the cookie back to the server. I'm not sure what the role of this > cookie (and session) are inside ActiveMQ, but once I configured Apache to > rewrite the cookie path correctly, I was able to start receiving messages > via ajax through the proxy. > > This is the Apache configuration which worked for me: > ProxyRequests Off > ProxyPass /amq http://localhost:8161/demo > ProxyPassReverse /amq http://localhost:8161/demo > ProxyPassReverseCookiePath /demo /amq > http://httpd.apache.org/docs/2.2/mod/mod_proxy.html#proxypassreverse > > My JavaScript uses "amq.uri = '/amq/amq'", so requests for > 'http://localhost/amq/amq' are proxied back to > 'http://localhost:8161/demo/amq'. Cookies returned by ActiveMQ with > 'path=/demo' are rewritten by Apache, so the client sees 'path=/amq'. > > alex > > On Jul 8, 2010, at 5:12 AM, Dejan Bosanac wrote: > >> Hi, >> >> can you test the snapshot. There are some refactoring in those areas >> lately. >> >> Also, try using the modified client side API, like show here >> >> >> http://fisheye6.atlassian.com/browse/activemq/trunk/activemq-web-demo/src/main/webapp/test/subscribe_send.html?r=HEAD >> >> BTW. messages sent to the topic before you subscribed will not be >> received by your subscriber. That's just how topics works. >> >> Cheers >> -- >> Dejan Bosanac - http://twitter.com/dejanb >> >> Open Source Integration - http://fusesource.com/ >> ActiveMQ in Action - http://www.manning.com/snyder/ >> Blog - http://www.nighttale.net >> >> >> >> On Wed, Jul 7, 2010 at 9:24 PM, Alex Dean <ad...@meteostar.com> wrote: >>> >>> Hello. I'm trying out the ActiveMQ ajax messaging described at >>> http://activemq.apache.org/ajax.html. >>> >>> I am able to send messages to a topic using this code: >>> <script type="text/javascript" src="/amq/amq.js"></script> >>> <script> >>> amq.uri='/amq'; >>> amq.sendMessage('topic://MY.DEMO', "<message item='hello again x'/>"); >>> </script> >>> >>> When I run that snippet, I see (in the ActiveMQ admin application) that >>> the >>> topic gets created and that the 'Messages Enqueued' value goes to '1'. >>> >>> Next, I try to subscribe to the topic using the following Javascript (in >>> a >>> separate web page): >>> <script type="text/javascript" src="/amq/amq.js"></script> >>> <script> >>> amq.uri='/amq'; >>> >>> myHandler = { >>> rcvMessage: function(message) { >>> console.log( 'got message' ); >>> } >>> }; >>> amq.addListener('test_subscriber','topic://MY.DEMO', >>> myHandler.rcvMessage >>> ); >>> </script> >>> >>> When I run this, I see the 'Number of Consumers' go to '1' in the admin >>> application. Using Firebug, I see amq.js performing a POST like >>> 'destination=topic://MY.DEMO&message=test_subscriber&type=listen'. This >>> seems to be as expected based on the tutorial. I then see amq.js perform >>> a >>> series of GET requests. The first is >>> 'https://localhost:7998/amq?timeout=10&_=', and successive GETs are >>> 'https://localhost:7998/amq'. >>> >>> All of these GETs are returned with empty responses, like >>> '<ajax-response></ajax-response>'. The first one appears to return >>> immediately, and the subsequent GETs time out after maybe 20-30 seconds. >>> >>> When I next publish a new message to the topic, the 'Number of Consumers' >>> immediately goes to '0'. The consumer's current GET request doesn't >>> appear >>> to return at this time, rather it seems to time out just like the others. >>> (I expected that ActiveMQ would return the message to the consumer as >>> soon >>> as it was available, and then close the connection.) >>> >>> I noticed the following snippet from the logs from around the time a >>> message >>> was published (while the consumer was active): >>> jvm 1 | DEBUG | Sent <message item='hello again x'/> to >>> topic://MY.DEMO >>> jvm 1 | DEBUG | RESPONSE /demo/amq 200 >>> jvm 1 | DEBUG | message for ActiveMQMessageConsumer { >>> value=ID:rutabaga.local-63558-1278527484508-2:1:1:1, started=true >>> }continuation=null >>> jvm 1 | DEBUG | localhost removing consumer: >>> ID:rutabaga.local-63558-1278527484508-2:1:1:1 for destination: >>> topic://MY.DEMO >>> >>> I have 2 questions at the moment: >>> 1. Why does my consumer not receive the messages published to the topic? >>> 2. Why is my consumer unsubscribed when a message is sent? >>> >>> Any help is appreciated. >>> >>> regards, >>> alex >>> >>> My environment: >>> Mac OSX 10.5.6 >>> ActiveMQ 5.3.2 >>> >>> java version "1.5.0_22" >>> Java(TM) 2 Runtime Environment, Standard Edition (build >>> 1.5.0_22-b03-333-9M3125) >>> Java HotSpot(TM) Client VM (build 1.5.0_22-147, mixed mode, sharing) >>> >>> Apache is listening on port 7998. >>> Apache is proxying requests to ActiveMQ using the directive 'ProxyPass >>> /amq >>> http://localhost:8161/demo/amq' >>> > >