You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@activemq.apache.org by hb...@gmx.net on 2007/01/13 07:39:19 UTC

Configuring REST/HTTP

I'm using activemq-4.1.0 (binary distribution) on a Debian/Linux AMD64. I'm
running amq as a standalone server by calling:

    bin/activemq

with the standard configuration available in the binary download. All went
quite right. It's possible to connect to the server via jconsole (JMX) and I'm
able to run your example applications (the ruby examples via STOMP are really
nice). But now I want to experiment with REST and there are some basic
questions/problems:

My usage scenario: Using amq as a standalone message broker, connecting a bunch
of php-clients (consumer) to a server application (ruby) over amq message
queues. Therby I want to use the REST functionality of amq by communicationg to
amq through a http or https connection.

How do I have to configure amq to be able to do REST processing ? I know
from your documentation, that I have to configure and map the
"MessageServlet".  But where in the "conf/activemq.xml" I have to place
the mapping ? How does the mapping looks like ? And how can I consume a
posted message i.e. from jconsole through a simple http client like curl
? Following my activemq.xml with which I tried to do the thing:

<beans>
  <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"/>
  <broker brokerName="localhost" useJmx="true" xmlns="http://activemq.org/config/1.0">
    <!-- In ActiveMQ 4, you can setup destination policies -->
    <destinationPolicy>
      <policyMap><policyEntries>
          <policyEntry topic="FOO.>">
            <dispatchPolicy>
              <strictOrderDispatchPolicy />
            </dispatchPolicy>
            <subscriptionRecoveryPolicy>
              <lastImageSubscriptionRecoveryPolicy />
            </subscriptionRecoveryPolicy>
          </policyEntry>
      </policyEntries></policyMap>
    </destinationPolicy>
    <persistenceAdapter>
        <journaledJDBC journalLogFiles="5" dataDirectory="${activemq.base}/activemq-data"/>
    </persistenceAdapter>
    <transportConnectors>
       <transportConnector name="openwire" uri="tcp://localhost:61616" discoveryUri="multicast://default"/>
       <transportConnector name="ssl"     uri="ssl://localhost:61617"/>
       <transportConnector name="stomp"   uri="stomp://localhost:61613"/>
       <transportConnector name="http"   uri="http://localhost:8080"/>
    </transportConnectors>
    <networkConnectors>
      <networkConnector name="default-nc" uri="multicast://default"/>
    </networkConnectors>
  </broker>
  <servlet>
      <servlet-name>MessageServlet</servlet-name>
      <servlet-class>org.apache.activemq.web.MessageServlet</servlet-class>
      <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
      <servlet-name>MessageServlet</servlet-name>
      <url-pattern>/queue</url-pattern>
  </servlet-mapping>
</beans>


Starting the amq (bin/activemq) amq shows all configured transport connectors
comming up correctly. After that I'm running jconsole and connect to the
running amq. There I add a message queue named "web" via the "Broker Operations"
"addQueue" command and produce a new textmessage on the newly created "web"
queue using its "sendTextMessage" command to queue the string "hello". All this
went quite well (I checked the message being there via the "browse" command of 
the "web" queue). Now I tried to consume the message via curl:

   curl http://localhost:8080/queue/web  

and get following response:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
<title>Error 400 </title>
</head>
<body><h2>HTTP ERROR: 400</h2><pre>No clientID header specified</pre>
<p>RequestURI=/queue/web</p><p><i><small><a href="http://jetty.mortbay.org/">
Powered by Jetty://</a></small></i></p><br/>
</body>
</html>

Additionally the amd logs: "WARN  HttpTunnelServlet    - No clientID header specified"

After that I controlled the status of my "web" queue, but nothing happens. All
attribute values keep its state (i.e.  EnqueueCount 1 DequeueCount 0). Second
try I called curl like this:

   curl -H "clientID: id67"  http://localhost:8080/queue/web

to submit a "clientID". After that curl gives no output at all but amd logs following:

   WARN  HttpTunnelServlet  - The clientID header specified is invalid. Client 
                              sesion has not yet been established for it: id67


How do I receive a valid clientID or how can I initiate a client session respectivily ?

At that time I give up because there are too many possibilities in being wrong.
I hope you can tell me what's going wrong.

Regards
hb7


PS: I'm using activemq for the first time and I'm not very familiar with all
that xml configuration stuff in the java world. Using ruby and or ruby/rails
make configuration tons lighter. But nevertheless your message passing system
is quite well and so I do really want to use it in my projects.  

Re: Configuring REST/HTTP

Posted by vezee <ar...@yahoo.com>.
Having the same issue. Getting "No clientID header specified" in the browser.
 
Anyone any clue?

-vezee
---------------------------------

hb7 wrote:
> 
> I'm using activemq-4.1.0 (binary distribution) on a Debian/Linux AMD64.
> I'm
> running amq as a standalone server by calling:
> 
>     bin/activemq
> 
> with the standard configuration available in the binary download. All went
> quite right. It's possible to connect to the server via jconsole (JMX) and
> I'm
> able to run your example applications (the ruby examples via STOMP are
> really
> nice). But now I want to experiment with REST and there are some basic
> questions/problems:
> 
> My usage scenario: Using amq as a standalone message broker, connecting a
> bunch
> of php-clients (consumer) to a server application (ruby) over amq message
> queues. Therby I want to use the REST functionality of amq by
> communicationg to
> amq through a http or https connection.
> 
> How do I have to configure amq to be able to do REST processing ? I know
> from your documentation, that I have to configure and map the
> "MessageServlet".  But where in the "conf/activemq.xml" I have to place
> the mapping ? How does the mapping looks like ? And how can I consume a
> posted message i.e. from jconsole through a simple http client like curl
> ? Following my activemq.xml with which I tried to do the thing:
> 
> <beans>
>   <bean
> class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"/>
>   <broker brokerName="localhost" useJmx="true"
> xmlns="http://activemq.org/config/1.0">
>     <!-- In ActiveMQ 4, you can setup destination policies -->
>     <destinationPolicy>
>       <policyMap><policyEntries>
>           <policyEntry topic="FOO.>">
>             <dispatchPolicy>
>               <strictOrderDispatchPolicy />
>             </dispatchPolicy>
>             <subscriptionRecoveryPolicy>
>               <lastImageSubscriptionRecoveryPolicy />
>             </subscriptionRecoveryPolicy>
>           </policyEntry>
>       </policyEntries></policyMap>
>     </destinationPolicy>
>     <persistenceAdapter>
>         <journaledJDBC journalLogFiles="5"
> dataDirectory="${activemq.base}/activemq-data"/>
>     </persistenceAdapter>
>     <transportConnectors>
>        <transportConnector name="openwire" uri="tcp://localhost:61616"
> discoveryUri="multicast://default"/>
>        <transportConnector name="ssl"     uri="ssl://localhost:61617"/>
>        <transportConnector name="stomp"   uri="stomp://localhost:61613"/>
>        <transportConnector name="http"   uri="http://localhost:8080"/>
>     </transportConnectors>
>     <networkConnectors>
>       <networkConnector name="default-nc" uri="multicast://default"/>
>     </networkConnectors>
>   </broker>
>   <servlet>
>       <servlet-name>MessageServlet</servlet-name>
>      
> <servlet-class>org.apache.activemq.web.MessageServlet</servlet-class>
>       <load-on-startup>1</load-on-startup>
>   </servlet>
>   <servlet-mapping>
>       <servlet-name>MessageServlet</servlet-name>
>       <url-pattern>/queue</url-pattern>
>   </servlet-mapping>
> </beans>
> 
> 
> Starting the amq (bin/activemq) amq shows all configured transport
> connectors
> comming up correctly. After that I'm running jconsole and connect to the
> running amq. There I add a message queue named "web" via the "Broker
> Operations"
> "addQueue" command and produce a new textmessage on the newly created
> "web"
> queue using its "sendTextMessage" command to queue the string "hello". All
> this
> went quite well (I checked the message being there via the "browse"
> command of 
> the "web" queue). Now I tried to consume the message via curl:
> 
>    curl http://localhost:8080/queue/web  
> 
> and get following response:
> 
> <html>
> <head>
> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
> <title>Error 400 </title>
> </head>
> <body><h2>HTTP ERROR: 400</h2><pre>No clientID header specified</pre>
> <p>RequestURI=/queue/web</p><p><small> http://jetty.mortbay.org/ 
> Powered by Jetty:// </small></p><br/>
> </body>
> </html>
> 
> Additionally the amd logs: "WARN  HttpTunnelServlet    - No clientID
> header specified"
> 
> After that I controlled the status of my "web" queue, but nothing happens.
> All
> attribute values keep its state (i.e.  EnqueueCount 1 DequeueCount 0).
> Second
> try I called curl like this:
> 
>    curl -H "clientID: id67"  http://localhost:8080/queue/web
> 
> to submit a "clientID". After that curl gives no output at all but amd
> logs following:
> 
>    WARN  HttpTunnelServlet  - The clientID header specified is invalid.
> Client 
>                               sesion has not yet been established for it:
> id67
> 
> 
> How do I receive a valid clientID or how can I initiate a client session
> respectivily ?
> 
> At that time I give up because there are too many possibilities in being
> wrong.
> I hope you can tell me what's going wrong.
> 
> Regards
> hb7
> 
> 
> PS: I'm using activemq for the first time and I'm not very familiar with
> all
> that xml configuration stuff in the java world. Using ruby and or
> ruby/rails
> make configuration tons lighter. But nevertheless your message passing
> system
> is quite well and so I do really want to use it in my projects.  
> 
> 

-- 
View this message in context: http://www.nabble.com/Configuring-REST-HTTP-tp8311839p25264088.html
Sent from the ActiveMQ - User mailing list archive at Nabble.com.