1.4 运行你的第一个ActiveMQ例子
前一节介绍如何在一个终端启动ActiveMQ。
而在这节,你需要两个以上的终端运行ActiveMQ的例子。
在第二个终端,进入example目录,看看如以下清单所示的内容。
[apache-activemq-5.4.1]$ cd ./example/
bsnyder@mongoose [example]$ ls -1
build.xml
conf
perfharness
ruby
src
transactions
example目录包含几个不同的项目。下面是各项的简介:
build.xml——为使用Java示例所需的Ant配置文件。
conf——conf目录保存为使用Java示例所需的配置信息。
perfharness——perfharness目录包含一个脚本运行IBM JMS性能工具(与ActiveMQ对照)。
ruby——ruby目录包含使用ActiveMQ结合ruby的一些示例和STOMP连接器。
src——Java示例所在目录,build.xml需要的文件。
transactions——transactions目录保存来自Sun的JMS教程的TransactedExample的ActiveMQ实现。
使用第二个终端,启动JMS订阅者如下所示。
[example]$ ant consumer
Buildfile: build.xml
init:
compile:
consumer:
[echo] Running consumer against server at $url =
tcp://localhost:61616 for subject $subject = TEST.FOO
[java] Connecting to URL: tcp://localhost:61616
[java] Consuming queue: TEST.FOO
[java] Using a non-durable subscription
[java] Running 1 parallel threads
[java] [Thread-2] We are about to wait until we consume:
2000 message(s) then we will shutdown
这命令编译Java示例并启动一个简单的JMS订阅程序。
正如你所看到的输出,这个订阅程序:
■使用TCP协议连接到代理(TCP:/ / localhost:61616)
■监视一个名为TEST.FOO的队列
■使用非持久订阅
■接收2000条消息之后关闭
基本上,JMS订阅者连接到ActiveMQ并等待消息。
现在,您可以发送一些消息到TEST.FOO。
在第三终端,进入example目录并启动JMS生产者如下所示。
这将立即开始发送消息。
[example]$ ant producer
Buildfile: build.xml
init:
compile:
producer:
[echo] Running producer against server at $url =
tcp://localhost:61616 for subject $subject = TEST.FOO
[java] Connecting to URL: tcp://localhost:61616
[java] Publishing a Message with size 1000 to queue: TEST.FOO
[java] Using non-persistent messages
[java] Sleeping between publish 0 ms
[java] Running 1 parallel threads
[java] [Thread-2] Sending message: 'Message: 0 sent at: Thu Oct 14
21:24:07 MDT 2010 ...'
[java] [Thread-2] Sending message: 'Message: 1 sent at: Thu Oct 14
21:24:07 MDT 2010 ...'
[java] [Thread-2] Sending message: 'Message: 2 sent at: Thu Oct 14
21:24:07 MDT 2010 ...'
尽管为了可读性略去了输出,但你可以从它的输出中看出,命令启动一个简单的JMS生产者:
■使用TCP连接器连接到代理(TCP:/ / localhost:61616)
■向名为TEST.FOO的队列发布消息
■使用非持久的消息
■持续不断地发送消息
JMS生产者一旦被连接,随后将发送2000条消息并关闭。
这正好是订阅者在关闭之前所等待的消息的数量。
消息被终端三的生产者发送,返回终端二并监视JMS订阅者当它消化这些消息的时候。
下面是你在终端二看到的输出:
[java] [Thread-2] Received: 'Message: 0 sent at: Thu Oct 14 21:23:56
MDT 2010 ...' (length 1000)
[java] [Thread-2] Received: 'Message: 1 sent at: Thu Oct 14 21:23:56
MDT 2010 ...' (length 1000)
[java] [Thread-2] Received: 'Message: 2 sent at: Thu Oct 14 21:23:56
MDT 2010 ...' (length 1000)
...
[java] [Thread-2] Received: 'Message: 1999 sent at: Thu Oct 14 21:23:56
MDT 2010 ...' (length 1000)
为了简洁部分输出已经被省略了,实际上订阅者收到2000消息并关闭了自身。
与此同时,订阅者和生产者应该都已关闭,但终端一的ActiveMQ代理仍在运行。
再回头看终端一,你会发现ActiveMQ似乎没有变化。
这是因为默认日志配置不输出任何绝对重要信息之外的日志。
当消息被发送和接收的时候,如果你想输出更多信息,你可以这样对日志配置做如下调整。
日志相关内容将在第14章进一步介绍。
那你在这节学到了什么呢?
通过使用ActiveMQ的Java示例,已经证明代理启动并运行,可以调解消息了。
内容不多,但这是重要的第一步。
如果你能够成功运行的Java示例,说明你的机器上没有网络问题并且ActiveMQ能正确运行。
如果你无法成功运行的Java示例,你需要解决这个问题。
如果你需要一些帮助,去ActiveMQ邮件列表寻找是最佳方式。
这些例子只是让你开始,但可以用来测试许多场景。
在这本书的其余部分,几个围绕一些共通用户案例的例子将被用来演示ActiveMQ及其特性。
这些例子将在第三章进一步解释。
1.5 总结
ActiveMQ是多才多艺的,易于使用的消息传递中间件。
您了解了一些ActiveMQ的特性,通过这本书以及一些可以应用ActiveMQ的场景。
本章中介绍的场景都是部署在世界各地的企业中的实际用例。
JMS规范被设计应用于这些场景的业务程序。
对于那些不熟悉JMS规范,或是想进一步了解它的人,下一章涵盖了企业消息传递机制和JMS的概述。
如果你已经精通这两个课题,你可以跳到第3章继续探索这本书的例子。