2016年8月19日星期五

ActiveMQ_042:使用 RESTful API 读取消息

环境:MAC OS X 10.11.6 + ActiveMQ 5.13.4

ActiveMQ 支持使用 RESTful API 读取消息,因为它内置了一个 api 应用。

1. 启动 ActiveMQ
./bin/activemq start

2. 发送消息到 TEST Queue
(1)curl -u admin:admin -d "body=message" http://localhost:8161/api/message/TEST?type=queue
如果不加 ?type=queue,将会默认发到 TEST Topic 中。
如果想默认发到 Queue 中,需要修改 ./webapps/api/WEB-INF/web.xml:
<servlet>
  <servlet-name>MessageServlet</servlet-name> 
  <servlet-class>org.apache.activemq.web.MessageServlet</servlet-class>
  <load-on-startup>1</load-on-startup>
  <init-param>
     <param-name>topic</param-name>
     <param-value>false</param-value>
  </init-param>
</servlet>

或者,也可以用以下两种方式发送消息:
(2)curl -XPOST -d "body=message" http://admin:admin@localhost:8161/api/message?destination=queue://orders.input
(3)curl -XPOST -d "body=message" http://admin:admin@localhost:8161/api/message?destination=topic://orders.input

3. 接收消息
(1)wget --user admin --password admin --save-cookies cookies.txt --load-cookies cookies.txt --keep-session-cookies  http://localhost:8161/api/message/TEST?type=queue
如果你希望同时有多个消费者使用 REST 消费消息,可以设置 prefetchSize=1,这样所有的消费者机会均等。
需要修改 ./webapps/api/WEB-INF/web.xml:
<servlet>
    <servlet-name>MessageServlet</servlet-name>
    <servlet-class>org.apache.activemq.web.MessageServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
    <init-param>
            <param-name>destinationOptions</param-name>
            <param-value>consumer.prefetchSize=1</param-value>
    </init-param>
</servlet>

或者,也可以用以下两种方式接收消息: 
(2)curl -XGET http://admin:admin@localhost:8161/api/message?destination=queue://orders.input
(3)curl -XGET http://admin:admin@localhost:8161/api/message?destination=topic://orders.input

参考文献:
1. http://activemq.apache.org/rest.html

没有评论: