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

3.2用例一:股票投资例子

阅读更多

3.2用例一:股票投资例子

就像之前提到的,我们第一个用例是使用股票投资的例子来展示发布/订阅的消息传送机制。这个例子使用一个Publisher类来发送一条股票价格消息到一个主题,同时,注册了Listener的Consumer类用异步方式从主题消费消息。这三个类体现了如何产生不停变换的股票消息并发送到被消费者订阅到主题上。

    在这个例子中,股票价格被发布的任意数量的主题上。主题的数量是由命令行携带给发布者和消费者的参数数量决定的。每一个类会动态地向/从主题发送或接收消息。图3.2和3.3在一个高层次上展示了这些例子要达到的目的。

    为了这个演示,两个主题将被使用。Publisher类使用一个单独的JMS MessageProducer以每次10条的方式去发送1000虚拟的股票消息,并随机地发送到由命令行参数所指明的各个主题上。发送完1000条消息,它将被关闭。Consumer类对每个主题都创建了一个MessageConsumer并且注册一个JMS MessageListener。因为这个例子是演示发布/订阅消息的,所以消费者必须在线消费消息(这个例子不使用持久订阅。)。下一步是真正地运行这个例子,这样你就能看到它们的动作了。


3.2.1运行股票投资例子

运行例子有以下步骤:

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

这些步骤看起来很简单。要注意的是,Consumer类必须比Publisher类先启动,这样它才能接收到所有的消息。这是因为这个例子是用来演示发布/订阅消息模式的,所以主题并不会为客户端保存消息(我们没有用持久订阅)。现在让我们开始这个例子吧。

    首先,我们要打开一个终端或者命令行来运行ActiveMQ。这个只需一条命令,如下所示:

Listing 3.2 Start up ActiveMQ

[apache-activemq-5.4.1] $ ./bin/activemq console
INFO: Using default configuration
(you can configure options in one of these file:
/etc/default/activemq /Users/bsnyder/.activemqrc)
INFO: Invoke the following command to create a configuration file
./bin/activemq setup [/etc/default/activemq | /Users/bsnyder/.activemqrc]
INFO: Using java
'/System/Library/Frameworks/JavaVM.framework/Home/bin/java'
INFO: Starting in foreground, this is just for debugging purposes
(stop process by pressing CTRL+C)
Java Runtime: Apple Inc. 1.6.0_20
/System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Home
Heap sizes: current=258880k free=253105k max=258880k
JVM args: -Xms256M -Xmx256M

-Dorg.apache.activemq.UseDedicatedTaskRunner=true
-Djava.util.logging.config.file=logging.properties
-Dcom.sun.management.jmxremote
-Dactivemq.classpath=/Users/bsnyder/amq/apache-activemq-5.4.1/conf;
-Dactivemq.home=/Users/bsnyder/amq/apache-activemq-5.4.1
-Dactivemq.base=/Users/bsnyder/amq/apache-activemq-5.4.1
ACTIVEMQ_HOME: /Users/bsnyder/amq/apache-activemq-5.4.1
ACTIVEMQ_BASE: /Users/bsnyder/amq/apache-activemq-5.4.1
Loading message broker from: xbean:activemq.xml
...
INFO | Started SelectChannelConnector@0.0.0.0:8161

 

下一个任务是打开第二个终端(或命令行)来运行Consumer类。我们使用maven-exec-plugin来运行Consumer类。使用这个plugin时我们通过exec.args属性来传递一些系统参数。运行Consumer的例子如下:

Listing 3.3 Run the stock portfolio consumer

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

[INFO] Scanning for projects...
[INFO] Searching repository for plugin with prefix: 'exec'.
[INFO] org.apache.maven.plugins: checking for updates from central
[INFO] org.codehaus.mojo: checking for updates from central
[INFO] artifact org.codehaus.mojo:exec-maven-plugin: checking for
updates from central
[INFO] snapshot org.codehaus.mojo:exec-maven-plugin:1.1.2-SNAPSHOT:
checking for updates from public-snapshots
[INFO] snapshot org.codehaus.mojo:exec-maven-plugin:1.1.2-SNAPSHOT:
checking for updates from central
Downloading:
http://localhost:8081/nexus/content/groups/public/org/codehaus/mojo/
exec-maven-plugin/1.1.2-SNAPSHOT/
exec-maven-plugin-1.1.2-20091120.114446-3.pom
4K downloaded (exec-maven-plugin-1.1.2-20091120.114446-3.pom)
Downloading:
http://localhost:8081/nexus/content/groups/public/org/codehaus/mojo/
mojo-parent/22/mojo-parent-22.pom
18K downloaded (mojo-parent-22.pom)
Downloading:
http://localhost:8081/nexus/content/groups/public-snapshots/org/codehaus/
mojo/exec-maven-plugin/1.1.2-SNAPSHOT/
exec-maven-plugin-1.1.2-20091120.114446-3.jar
36K downloaded (exec-maven-plugin-1.1.2-20091120.114446-3.jar)
[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.
Downloading:
http://localhost:8081/nexus/content/groups/public/org/apache/commons/
commons-exec/1.0.1/commons-exec-1.0.1.pom
7K downloaded (commons-exec-1.0.1.pom)
Downloading:
http://localhost:8081/nexus/content/groups/public/org/apache/commons/
commons-exec/1.0.1/commons-exec-1.0.1.jar
48K downloaded (commons-exec-1.0.1.jar)
[INFO] [exec:java {execution: default-cli}]

 

在列表3.3你可以看到Maven下载了一些运行例子必须的组件。当Consumer启动完毕,我们就可以启动Publisher并开始发送股票消息到两个有命令行参数指定的目标CSCO和ORCL。这两个名字是随机取的,你可以改为其它任意字符串。重要的是Consumer和Publisher必须使用相同的参数。

运行Consumer时构建错误

当你运行Consumer类时,如果你看到BUILD ERROR,那么你必须先编译源代码,然后再运行它。下面的命令可以用来编译源代码:$ mvn clean install    这个命令编译并打包源代码。之后你可以用原先的命令来运行Consumer类了。

注意,现在输出已经停了,看起来就像Consumer挂起来。这是正常的,因为它正在等待消息。当Publisher开始发送消息,Consumer就会开始消费它们。

 

在输出窗口为什么看到所有的组件都是从本地下载?

在3.1接如果Maven正确安装,那么它会下载运行例子所需要所有组件。在第一个输出窗口你可以看到它在下载组件。注意到所有的组件都是从本地下载而不是从远程Maven库下载。这是因为这些例子已经被配置为使用一个叫做Nexus的位于本地计算机的Maven库。Nexus提供很多好处,其中一个是它可以作为远程Maven库的代理缓存所有已下载组件。在Maven第一次下载组件后,它们都被保存到本地缓存里。如果多次编译,Nexus从本地缓存提供组件,这加快了编译速度。更多关于Nexus的消息请看:http://nexus.sonatype.org/

 

接下来我们打开第三个终端来运行Publisher类。注意在exec.args中必须使用与原来运行Consumer相同的参数,因为maven-exec-plugin也会用这些参数来运行Publisher。下面是运行Publisher的例子。

Listing 3.4 Running the stock portfolio publisher

[amq-in-action-example-src] $ mvn exec:java \
-Dexec.mainClass=org.apache.activemq.book.ch3.portfolio.Publisher \
-Dexec.args="CSCO ORCL"
[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: {offer=62.6861410176471, price=62.62351750014696, up=true,
stock=ORCL} on destination: topic://STOCKS.ORCL
Sending: {offer=55.508573596887715, price=55.45312047641131, up=true,
stock=CSCO} on destination: topic://STOCKS.CSCO
Sending: {offer=62.527946513790205, price=62.46548103275745, up=false,
stock=ORCL} on destination: topic://STOCKS.ORCL
Sending: {offer=55.78778713074073, price=55.73205507566507, up=true,
stock=CSCO} on destination: topic://STOCKS.CSCO
Sending: {offer=55.593918646251986, price=55.53838026598601, up=false,
stock=CSCO} on destination: topic://STOCKS.CSCO
Sending: {offer=55.83360390719586, price=55.777826081114746, up=true,
stock=CSCO} on destination: topic://STOCKS.CSCO
Sending: {offer=55.99233608275527, price=55.93639968307221, up=true,
stock=CSCO} on destination: topic://STOCKS.CSCO
Sending: {offer=62.006501598331475, price=61.94455704129019, up=false,
stock=ORCL} on destination: topic://STOCKS.ORCL
Sending: {offer=55.53698948617822, price=55.48150797820003, up=false,
stock=CSCO} on destination: topic://STOCKS.CSCO
Sending: {offer=61.43866500377897, price=61.377287716062916, up=false,
stock=ORCL} on destination: topic://STOCKS.ORCL
Published '10' of '10' price messages
Sending: {offer=55.466945358331216, price=55.41153382450671, up=false,
stock=CSCO} on destination: topic://STOCKS.CSCO
Sending: {offer=61.27694222131968, price=61.215726494824864, up=false,
stock=ORCL} on destination: topic://STOCKS.ORCL
...
Published '10' of '30' price messages
...

 

运行Publisher时,由于Maven在之前运行Consumer时已经下载了所有的依赖组件,所以无需再下载了。在输出窗口下半部分可以看到,股票价格消息每10条一组发送到了两个主题。由于输出太多,部分没有显示在上面,但是要知道Publisher将会一直运行直到发送完1000条消息。

    运行完Publisher,现在切换到第二个终端,你可以看到Consumer正在从主题上消费消息。

...
[INFO] [exec:java {execution: default-cli}]
ORCL 62.62 62.69 up
CSCO 55.45 55.51 up
ORCL 62.47 62.53 down
CSCO 55.73 55.79 up
CSCO 55.94 55.99 up
CSCO 55.41 55.47 down
ORCL 61.22 61.28 down
ORCL 61.42 61.48 up
...

输出的前缀是注册到ORCL和CSCO主题上的监听器打印出来的。这个输出说明了现在正在消费由Publisher发送到两个主题的消息。当Publisher发送我1000条消息后,它将被关闭。但是Consumer仍会继续运行并挂起等待更多的消息。你可以在第二个终端按CTRL-C来关闭Consumer。

    现在你已经看到ActiveMQ怎样以发布/订阅模式运行,下一节将展示它如何以点对点消息传送方式运行。

  • 大小: 46.9 KB
1
1
分享到:
评论

相关推荐

    Excel 2010函数应用速查手册

    源文件:光盘\源文件\02\032.xlsx 用例31:计算实际年利率(EFFECT) 源文件:光盘\源文件\02\033.xlsx 用例32:计算名义利率(NOMINAL) 源文件:光盘\源文件\02\034.xlsx 用例33:计算股票的收益率(ODDLYIELD) ...

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

    本文将深入探讨“提交订单”这一具体用例的文档内容,以期提供一种理解和编写用例文档的实例。 用例名称为“提交订单”,用例编号为UC002,其主要参与者是系统会员。这个用例主要描述的是会员在系统中提交订单的...

    网络选课用例图

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

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

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

    Java实现嗖嗖移动营业大厅

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

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

    软件测试用例模板详细用例经典是软件测试中非常重要的一部分,以下是对该模板的详细分析和知识点总结: 一、测试用例设计 测试用例设计是软件测试的核心部分,该模板提供了一个详细的测试用例设计模板,包括测试...

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

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

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

    总结来说,测试用例设计是一项涉及多方面知识的复杂任务,包括理解和定义基本概念,巧妙设计和编写测试用例,进行有效的评估,以及实施科学的管理策略。只有全面掌握这些要点,才能确保软件测试的全面性和准确性,...

    测试用例设计练习.doc

    等价类划分法是一种将所有可能的输入数据划分为若干个等价类,然后只需从每个等价类中选取少数代表性的数据作为测试用例的方法。在这个档案管理系统的例子中,输入条件包括年份(1990-2049)、月份(01-12)、字符...

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

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

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

    在软件测试中,测试用例的设计是一个非常重要的步骤,它直接关系到测试的效率和测试结果的质量。因果图法是软件测试中的一种常用方法,它可以帮助测试人员设计出更加完善的测试用例。在本文中,我们将详细介绍因果...

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

    几乎每个系统都会用到,针对这几个方面,写如下测试用例一:增加1:在添加页面,输入要添加的数据项均合理,检查数据库以及列表页是否添加了相应的数据2:在添加页面,留出一个必填项为空,检查是否会提示3:按照...

    手机销售系统的用例分析

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

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

    因果图法是一种在软件测试中广泛使用的测试用例设计技术,尤其适用于处理多个输入条件之间的复杂逻辑关系。这种方法能够帮助测试人员系统地考虑所有可能的输入组合,从而确保测试覆盖的全面性。以下是关于因果图法的...

    白盒测试用例练习.docx

    一、语句覆盖测试用例 在白盒测试中,语句覆盖是最基本的测试用例设计方法。通过分析程序代码,设计了两组测试用例,以满足语句覆盖的要求。 测试用例1: * 输入:x=4, z=5, y=8 * 输出:k=31, j=0 * 覆盖路径:...

    oa用例文档.docx

    #### 一、登录(用例编号:UC1) - **描述**:此用例描述了用户如何通过输入正确的用户名和密码来登录OA系统的流程。 - **关键步骤**: - 用户打开登录界面。 - 输入用户名和密码。 - 系统验证用户身份。 - 登录...

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

    use case:一个用例描述了为实现某个有价值的成果,在参与者与系统之间进行的交互。 3. 用例描述 项目中的所有用例进行详细描述。 3.1 用户管理用例 用例名称:用户创建用例 ID:角色:Admin 用例说明:学院图书...

    公司项目后台管理测试用例

    公司项目后台管理测试用例 本测试用例涵盖了公司项目后台管理的多个方面,包括登录模块、角色管理、用户权限管理、用户管理和修改密码功能。下面是每个模块的详细信息: 登录模块 测试用例编号 TestCase -1- * ...

    Gartner发布生成式AI用例棱镜:中国生成式AI最具发展前景的19个用例分析(PPT下载)

    本文介绍了生成式人工智能(GenAI)在中国最具发展前景的19个用例,这些用例可以改善企业运营、增加营收、提升客户体验并缩小风险敞口...中国的首席信息官(CIO)可参考本文,根据用例成熟度及其业务影响制定投资战略。

Global site tag (gtag.js) - Google Analytics