`
JFires
  • 浏览: 41830 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

3.3用例二:工作队列

阅读更多

3.3用例二:工作队列

第二个例子通过工作队列来演示点对点的消息传送。这个例子使用Producer类来向工作队列发送消息,而注册了Listener的Consumer类则用异步的方式从队列消费消息。这3个类展示了基本的JMS点对点消息传送是如何工作的。这些类和上一个例子很相似,区别就是用在不同的消息传送领域。

    Producer类发送消息到JOBS.suspend和JOBS.delete队列,Consumer则消费它们。图3.3在一个高层次描述了这个过程。



     Producer使用一个单独的MessageProducer来发送1000条工作消息,每次10条,随机地发送到两个队列。发完1000条消息后关闭。Consumer类对每一个队列使用一个MessageConsumer并注册一个JMS MessageListener来使用消息并输出相关信息。

 

3.3.1 运行工作队列例子

运行工作队列的步骤几乎和前一个例子的步骤一样:

  1. 启动ActiveMQ
  2. 运行Producer类
  3. 运行Consumer类

这些步骤都很简单,但有一个地方要注意。我们现在使用的是点对点消息传送,队列会保存消息直到它们被消费或者过期。所以即使Produce先于Consumer启动,Consumer也不会错失任何消息。

    就像股票投资例子一样,第一个步骤是启动ActiveMQ。这个步骤就不再详述了,因为它和之前完全一样。

    接上来,打开第二个终端或命令行窗口来运行Producer。

Listing 3.5 Running the job queue publisher

[amq-in-action-example-src] $ mvn exec:java \
-Dexec.mainClass=org.apache.activemq.book.ch3.jobs.Publisher

[INFO] Scanning for projects...
[INFO] Searching repository for plugin with prefix: 'exec'.
[INFO] -------------------------------------------------------------------
-----
[INFO] Building ActiveMQ in Action Examples
[INFO] task-segment: [exec:java]
[INFO] -------------------------------------------------------------------
-----
[INFO] Preparing exec:java
[INFO] No goals needed for project - skipping
[WARNING] POM for 'woodstox:wstx-asl:pom:3.2.7:compile' is invalid.

Its dependencies (if any) will NOT be available to the current build.
[INFO] [exec:java {execution: default-cli}]
Sending: id: 1000000 on queue: queue://JOBS.delete
Sending: id: 1000001 on queue: queue://JOBS.delete
Sending: id: 1000002 on queue: queue://JOBS.delete
Sending: id: 1000003 on queue: queue://JOBS.delete
Sending: id: 1000004 on queue: queue://JOBS.delete
Sending: id: 1000005 on queue: queue://JOBS.delete
Sending: id: 1000006 on queue: queue://JOBS.delete
Sending: id: 1000007 on queue: queue://JOBS.delete
Sending: id: 1000008 on queue: queue://JOBS.delete
Sending: id: 1000009 on queue: queue://JOBS.delete
Published '10' of '10' job messages
Sending: id: 1000010 on queue: queue://JOBS.delete
Sending: id: 1000011 on queue: queue://JOBS.suspend
...
Published '10' of '30' job messages
...

 

注意运行Producer时并不需要传递任何参数。Publisher类包含了两个队列delete和suspend。这清楚地显示在输出内容上。Producer会发送1000条消息然后关闭。

    接下来的任务是打开另一个终端或命令行窗口来运行Consumer,Consumer会从两个队列消费消息。这个命令如下:

Listing 3.6 Running the job queue consumer

[amq-in-action-example-src] $ mvn exec:java \
-Dexec.mainClass=org.apache.activemq.book.ch3.jobs.Consumer

[INFO] Scanning for projects...
[INFO] Searching repository for plugin with prefix: 'exec'.
[INFO] -------------------------------------------------------------------
-----
[INFO] Building ActiveMQ in Action Examples
[INFO] task-segment: [exec:java]
[INFO] -------------------------------------------------------------------
-----
[INFO] Preparing exec:java
[INFO] No goals needed for project - skipping
[WARNING] POM for 'woodstox:wstx-asl:pom:3.2.7:compile' is invalid.
Its dependencies (if any) will NOT be available to the current build.
[INFO] [exec:java {execution: default-cli}]
suspend id:1000003
suspend id:1000010
suspend id:1000012
suspend id:1000013
suspend id:1000015
suspend id:1000022
suspend id:1000025
suspend id:1000027
delete id:1000000
delete id:1000001

delete id:1000002
delete id:1000004
delete id:1000005
...

 

一开始,Consumer会运行得很快,消费完队列里所有的消息。当它赶上Producer时,Consumer开始慢下来,然后和Producer同步,直到Producer发送完1000条消息。当所有的消息发送完后,Producer自动终止,而Consumer不会,你需要在第三个终端上按CTRL-C来停止它。

    工作队列的例子结束了。现在你看到了ActiveMQ是如何以点对点消息传送方式工作的。

 

3.4总结

对本书例子的简单介绍的目的在于--快速和专注。工作和投资的例子在商业领域是很常见的,但这只是消息传送领域大量例子中的两个。虽然这两个例子只是在一个较高层次演示了两种消息传送领域,但它们还有其它作用。通过使用ActiveMQ提供的特性,这两个例子将在本书剩下部分被修改。所以你会经常看到这两个例子,不过稍有不同而已。

    本书的第一部分(1~3章)先向你介绍了ActiveMQ,使你对ActiveMQ有一个高层次的理解。接下来是关注面向消息中间件和JMS规范。虽然这些主题不只是与ActiveMQ有关,但对于理解ActiveMQ很有帮助。你也看了一些例子,这些例子将在整本书中使用。第一部分的内容是掌握ActiveMQ的热身,第二部分你将学会对ActiveMQ的连接,持久化,安全等各个方面进行配置。

  • 大小: 45.3 KB
1
2
分享到:
评论

相关推荐

    计算机二级公共基础知识

    若有队列: Q =(q1,q2,…,qn) 那么,q1为队头元素(排头元素),qn为队尾元素。队列中的元素是按照q1,q2,…,qn的顺序进入的,退出队列也只能按照这个次序依次退出,即只有在q1,q2,…,qn-1都退队之后,qn才能...

    算法,4th,塞奇威克 (Robert Sedgewick)韦恩 (Kevin Wayne), 谢路云 译.azw3

    3.3 平衡查找树 3.3.12—3查找树 3.3.2 红黑二叉查找树 3.3.3 实现 3.3.4 删除操作 3.3.5 红黑树的性质 3.4 散列表 3.4.1 散列函数 3.4.2 基于拉链法的散列表 3.4.3 基于线性探测法的散列表 3.4.4 调整...

    算法第四版-PDF-网盘链接

     3.1.3 用例举例 233  3.1.4 无序链表中的顺序查找 235  3.1.5 有序数组中的二分查找 238  3.1.6 对二分查找的分析 242  3.1.7 预览 244  3.2 二叉查找树 250  3.2.1 基本实现 250  3.2.2 ...

    《算法》中文版,Robert Sedgewick,塞奇威克

    3.3 平衡查找树 3.3.1 2-3查找树 3.3.2 红黑二叉查找树 3.3.3 实现 3.3.4 删除操作 3.3.5 红黑树的性质 3.4 散列表 3.4.1 散列函数 3.4.2 基于拉链法的散列表 3.4.3 基于线性探测法的散列表 3.4.4 调整...

    FYP:期末项目

    五年计划 ... 队列完成后,边缘需要存储在队列结构中(3.2) edge_消除 基本上可以在输入图上运行(3.3) 但是,可能存在一个错误:常规约束,它可能会消除比预期更多的边缘(3.3) 实施中 输入边缘

    算法-第4版-完整版

    3.3 平衡查找树 269 3.3.1 2-3查找树 269 3.3.2 红黑二叉查找树 275 3.3.3 实现 280 3.3.4 删除操作 282 3.3.5 红黑树的性质 284 3.4 散列表 293 3.4.1 散列函数 293 3.4.2 基于拉链法的散...

    算法 第4版-谢路云译-带完整书签

    3.3 平衡査找树 269 3.3.1 2-3査找树 269 3.3.2 红黑二叉查找树 275 3.3.3 实现 280 3.3.4 删除操作 282 3.3.5 红黑树的性质 284 3.4 散列表 293 3.4.1 散列函数 293 3.4.2 基于拉链法的散列表 297...

    算法 第4版 高清中文版

    3.3 平衡查找树 269 3.3.1 2-3查找树 269 3.3.2 红黑二叉查找树 275 3.3.3 实现 280 3.3.4 删除操作 282 3.3.5 红黑树的性质 284 3.4 散列表 293 3.4.1 散列函数 293 3.4.2 基于拉链法的散列表 297 3.4.3 ...

    Activiti6.0教程例子下载

    3.3. Spring配置文件 这里配置了数据源、事务管理、流程引擎及几个必要的xxxService。这里数据源使用的是dbcp。数据库信息就配置成你自己本地数据库的信息,如果不会配置。 destroy-method="close"> ...

    2005-2009软件设计师历年真题

     • 数组(静态数组、动态数组)、线性表、链表(单向链表、双向链表、循环链表)、队列、栈、树(二叉树、查找树、平衡树、线索树、线索树、堆)、图等的定义、存储和操作  • Hash(存储地址计算,冲突处理)  ...

Global site tag (gtag.js) - Google Analytics