Loading ...
Sorry, an error occurred while loading the content.

Message queues

Expand Messages
  • Paul Winkler
    Reading the docs at http://activemq.apache.org/ I noticed they have a REST API. So I clicked on http://activemq.apache.org/rest.html to read more and, perhaps
    Message 1 of 70 , Jun 12, 2007
    View Source
    • 0 Attachment
      Reading the docs at http://activemq.apache.org/ I noticed they have a
      REST API. So I clicked on http://activemq.apache.org/rest.html to
      read more and, perhaps not surprisingly, found that it's pretty broken
      REST.

      Adding a message to the queue seems fine... they give as an example
      a queue at http://www.acme.com/queue/orders/input and you can add a
      new message in the queue by POSTing to that URL. Fine.

      Consuming a message from the queue, though, seems problematic.
      They allow either GET or DELETE on the *same* URL to pop a message
      from the queue.

      They are aware that this is wrong:
      "Note that strict REST requires that GET be a read only operation; so
      strictly speaking we should not use GET to allow folks to consume
      messages. Though we allow this as it simplifies HTTP/DHTML/Ajax
      integration somewhat."

      ... but they don't seem to understand *how* wrong it is:

      * it's not REST that says GET is a read-only operation; it's HTTP. So
      their HTTP implementation is broken. Sadly seems to be pretty common.

      * DELETE on a URL representing a queue means you want to delete the
      entire queue, not a single message!

      The reason I'm writing to this list is that I thought it was an
      interesting case and I couldn't immediately think of better solution.
      Has anybody thought of a good way to model a queue?

      You could of course do a GET on the queue, returning a list of
      available messages, then DELETE one of those - but that leads to
      concurrency problems.

      --

      Paul Winkler
      http://www.slinkp.com
    • Niklas Gustavsson
      ... IBM just published their similar HTTP interface to WebSphere MQ. http://www-1.ibm.com/support/docview.wss?uid=swg24016142 See the PDF, especially chapter 5
      Message 70 of 70 , Jun 30, 2007
      View Source
      • 0 Attachment
        Paul Winkler wrote:
        >
        >
        > Reading the docs at http://activemq.apache.org/
        > <http://activemq.apache.org/> I noticed they have a
        > REST API. So I clicked on http://activemq.apache.org/rest.html
        > <http://activemq.apache.org/rest.html> to
        > read more and, perhaps not surprisingly, found that it's pretty broken
        > REST.

        IBM just published their similar HTTP interface to WebSphere MQ.

        http://www-1.ibm.com/support/docview.wss?uid=swg24016142

        See the PDF, especially chapter 5 and 8 for the details regarding their
        use of HTTP. Now, they don't claim to be RESTful, but they do seem to
        care about being good HTTP citizens, examples such as: "GET - Browses
        the first message on a queue. In line with the HTTP protocol this does
        not delete the message from the queue".

        However, there some obvious problems with the design (possibly due to
        simplifying clients), most of which has already been discussed in this
        thread:
        * DELETE to retrieve a message is done on the queue URL
        * DELETE to browse a message is done on the queue URL
        * No support for retries if a POST or DELETE fails
        * A custom header (x-msg-format) that overrides Content-Type, not sure
        if this is really an issue
        * No description of how caching is handled. Examples does not contain
        any cache headers at all so I'm guessing that it's not supported at all.

        What do you think if their design, judging from this thread this seems
        to be an tricky area?

        /niklas
      Your message has been successfully submitted and would be delivered to recipients shortly.