`

3.3 用例2: job queue 示例

 
阅读更多

3.3 Use case two: the job queue example

3.3 用例2: job queue 示例

 

The second use case focuses on job queues to illustrate point-to-point messaging. This

example uses a Producer class to send job messages to a job queue and a Consumer

class for registering a Listener class to consume messages from queues in an asynchronous

manner. These three classes provide the functionality necessary to show

how JMS point-to-point messaging should work. The classes in this example are

extremely similar to those used in the stock portfolio example. The difference

between the two examples is the JMS messaging domain that each uses.

The Producer class in this example sends messages to the JOBS.suspend and

JOBS.delete queues and the Consumer class consumes. 

 

Figure 3.3 contains a high-level diagram of the job queue example’s functionality.

The Producer class uses a single JMS MessageProducer to send 1,000 job messages

in blocks of 10 randomly across the two queues. After sending 1,000 messages total,

it’ll shut down. The Consumer class uses one JMS MessageConsumer per queue and registers

a JMS MessageListener on each queue to utilize the message and output its contents.

 

第二个关于job queue的例子旨在说明点对点消息系统.这个例子使用Producer类发送job消息到

消息队列,同时使用Consumer类来注册Listener类以便以异步方式处理消息队列中的消息.

这三个类提供的功能展示了JMS点对点消息是如何发送和接收的.这个例子中的三个类和stock portfolio

例子中相应的类非常相似,两个例子的不同点在于各自使用了不同的消息系统.本例中Producer类发送

消息到消息队列JOBS.suspend和JOBS.delete,Consumer类从消息队列接收和处理消息.

图3.3概述了job queue例子的功能.Producer类使用单一的JMS MessageProducer发送1000个job消息,

这些消息以10个为一组随机的发送到两个消息队列之一.在发送1000个消息之后,Producer类自动关闭.

Consumer使用单一的JMS MessageConsumer为每一个消息队列注册JMS MessageListener,

JMS MessageListener在处理消息之后输出消息内容.

 

3.3.1 Running the job queue example

3.3.1 运行job queue实例

 

The steps for executing the job queues example are nearly identical to the previous

example:

1 Start up ActiveMQ

2 Run the Producer class

3 Run the Consumer class

Again, these steps are simple, but there’s one exception to note. When using PTP messaging,

queues will hold messages until they’re consumed or the messages expire. So

the Producer can be started before the Consumer and the Consumer won’t miss any

messages.

Just as in the stock portfolio example, the first task is to start up ActiveMQ. You’ll

be spared the output from this task, as it’s the same as shown in section1.6 and none

of the default configuration has been changed.

Next, open a second terminal or command line to execute the Producer as shown

here.

 

运行job queue这个例子的步骤和运行前面一个例子的步骤几乎相同:

1 启动ActiveMQ

2 运行Consumer类

3 运行Publisher类

 

同样,这些步骤很简单,但是有一点需要注意.当使用点对点消息时,消息队列会保存消息知道消息被处理

或者过期.所以,Producer类可以在Consumer类之前运行,并且Consumer类不会错过任何消息.

 

如同在stock portfolio实例中那样,第一步是启动ActiveMQ.这里省略了启动ActiveMQ时控制台的输出,

因为这里的输出和清单1.6中一样,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

...

 

Note that no arguments are necessary to execute the Producer in listing 3.5. The

Publisher class contains two queues to which it publishes named delete and suspend;

hence, the use of those words in the output. The Producer will continue until it sends

a total of 1,000 messages to the two queues and then it’ll shut down.

The third task is to open another terminal or command line and execute the Consumer

to consume the messages from the two queues. This command is shown next.

 

注意,清单3.5中运行Producer类不需要任何参数.Producer发送消息到两个名称分别为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

...

The Consumer will run fast at first, consuming all the messages already on the queues.

When it catches up to where the Producer is in sending the 1,000 messages, the

Consumer slows down and keeps up with the Publisher until it completes. When all

the messages have been sent and the Producer shuts itself down, you’ll need to press

CTRL-C in the third terminal where the Consumer is running to shut it down.

This concludes the job queue example. Now you’ve seen how well ActiveMQ works

in a point-to-point messaging scenario.

 

Consumer类在开始的时候快速执行,处理消息队列中的的消息.当Producer发送的1000个消息处理完后,

Consumer慢下来,等待Publisher类发送消息直到Publisher完成发送1000个消息并自动关闭.当Producer

发送完1000个消息后,Producer自动关闭后,你需要在第三个终端或命令行控制台窗口按下CTRL+C键以便

关闭Consumer类.这就是job queue的例子.现在你已经知道点对点消息是如何在ActiveMQ中工作的.

分享到:
评论

相关推荐

    用例模板:”提交订单“用例文档示例.docx

    《用例模板:“提交订单”用例文档详解》 在软件开发过程中,用例建模是一种重要的需求分析方法,它通过描绘系统与用户之间的交互来明确功能需求。用例文档,作为用例建模的核心部分,详尽地记录了用户与系统间的...

    网络选课用例图

    用例名称:查看选课 用例描述:查看学生自己的选课信息 前置条件:学生登录进入系统 后置条件:显示选课信息 基本操作流程: 1. 学生点击学生选课情况 2. 通过条件筛选选课信息(如什么学年什么学期) 3. 显示相...

    Java实现嗖嗖移动营业大厅

    嗖嗖移动营业大厅 功能有用户注册、用户登录(本月账单查询、套餐余量查询、打印消费详单、更换套餐、办理退网)、使用嗖嗖、用户充值、资费说明、退出系统功能,用Java开发的源程序,注册的数据信息可以保存到项目...

    Excel 2010函数应用速查手册

    源文件:光盘\源文件\01\02.xlsx 第2章 财务函数 用例1:计算债券的价格(PRICE) 源文件:光盘\源文件\02\029.xlsx 用例2:计算有价证券的价格(PRICEDISC) 源文件:光盘\源文件\02\031.xlsx 用例3:以固定余额...

    AR眼镜AI用例盘点:从单薄的功能一窥广阔的生命力.docx

    AR眼镜AI用例盘点:从单薄的功能一窥广阔的生命力.docx

    Z1学生考勤系统性能测试用例.pdf

    Z1学生考勤系统性能测试用例 本测试报告旨在对图书馆管理系统网站进行性能测试,以验证网站是否符合需求。考虑到用户数量及数据的增多对服务器造成的压力不可估计,因此计划对图书馆管理系统网站进行负载性能测试。...

    163邮箱注册模块测试用例.doc

    在测试过程中,我们将使用等价类划分和边界值分析方法来设计测试用例。 测试用例 1:用户名和密码输入正确 * 输入用户名:Asd_2013 * 输入密码:asd123 * 确认密码:asd123 * 预期结果:注册成功 测试用例 2:...

    软件测试用例模板一详细用例经典.doc

    * 用例2:测试添加、删除、修改按钮的可用性 * 用例3:测试承受、汇报按钮的可用性 * 用例4:测试考核审核按钮的可用性 * 用例5:测试二级联动下拉列表的正确性 * 用例6:测试DataGrid功能的正确性 * 用例7:测试...

    测试用例设计练习.doc

    - 用例2:198911,测试年份边界下限。 - 用例3:205011,测试年份边界上限。 - 用例4:201600,测试月份边界下限。 - 用例5:201613,测试月份边界上限。 - 用例6:20161,测试长度边界下限。 - 用例7:...

    测试用例设计:测试用例的基本概念 测试用例的设计和编写 测试用例评估 测试用例的管理

    测试用例设计是软件质量保证的关键环节,它涵盖了测试用例的基本概念、设计与编写、评估以及管理等多个方面。理解并熟练掌握这些知识点对于确保软件产品的质量和稳定性至关重要。 首先,我们要了解测试用例的基本...

    白盒测试用例练习.docx

    测试用例2: * 输入:x=2, z=11, y=5 * 输出:k=0, j=0 * 覆盖路径:P4(a-b-d) 二、判定覆盖测试用例 判定覆盖是白盒测试中的一种重要方法,通过设计测试用例来覆盖判定语句。通过分析程序代码,设计了两组测试...

    【软件测试】: 测试用例:因果图法设计测试用例.doc

    测试用例2:输入正确的QQ账号,错误的密码,点击登录按钮,预期结果:登录失败。 测试用例3:输入错误的QQ账号,正确的密码,点击登录按钮,预期结果:登录失败。 通过因果图法,我们可以设计出更加完善的测试用例...

    手机销售系统的用例分析

    手机销售系统的用例分析 用例分析是 Unified Modeling Language(UML)中的一种重要方法,它可以帮助软件开发者和业务分析者更好地理解业务需求并描述系统的行为。在手机销售系统中,用例分析可以帮助我们更好地...

    软件测试中如何进行增加、编辑、删除和密码修改测试用例

    写如下测试用例一:增加1:在添加页面,输入要添加的数据项均合理,检查数据库以及列表页是否添加了相应的数据2:在添加页面,留出一个必填项为空,检查是否会提示3:按照边界值等价类设计测试用例原则设计其他输入...

    图书馆系统用例规约描述.doc

    3.3 个人信息修改用例 用例名称:个人信息修改用例 ID:角色:User 用例说明:用来维护用户的相关信息 前置条件:User登录学院图书馆系统 基本事件流: 1. User打开个人信息维护页面 2. User输入现密码、并输入你...

    在线考试用例图

    用例名称:在线考试 用例描述:查看学生自己的选课信息 前置条件:考试者登录进入系统 后置条件:自动显示考试成绩 基本操作流程: 1. 学生点击在线考试栏目 2. 点击选择考试科目 3. 系统随机调用试卷 4. 做完试卷...

    测试用例设计方法之一因果图法

    2. 测试用例2:输入数据为`#A`,预期输出是给出信息 M。 3. 测试用例3:输入数据为`*6`,预期输出是修改文件。 4. 测试用例4:输入数据为`B`,预期输出是给出信息 M。 5. 测试用例5:输入数据为`A1`,预期输出是给出...

    测试用例实例(含:功能测试用例、性能测试用例、兼容性测试用例)

    2. **用户并发测试用例**:模拟大量用户同时访问系统,检测其承载能力。 3. **大数据量测试用例**:测试系统处理大数据集时的表现。 4. **疲劳强度测试用例**:长时间高负载运行,观察系统稳定性。 5. **负载测试...

    UML企业进销存管理系统.doc

    * 销售商品用例描述:该用例描述了销售商品的过程,包括商品的选择、数量的输入、价格的计算和订单的生成。 * 查看商品信息用例描述:该用例描述了查看商品信息的过程,包括商品的基本信息、库存数量和价格信息。 * ...

Global site tag (gtag.js) - Google Analytics