博客已搬家, 更好阅读体验,猛戳http://www.jack-yin.com/english/translation/activemq-in-action/1633.html
9.1 Adapting the stock portfolio example
9.1 修改stock portfolio示例程序
In chapter 3, we defined a stock portfolio example that uses map messages to
exchange data between producers and consumers. For the purpose of this chapter,
we’ll modify this original example and make it a better fit for environments described
here. Instead of map messages, we’ll exchange XML data in text messages, as that’s the
more natural way of communication in some of these environments, such as dynamic
languages. So we’ll create a Java message producer that sends text messages with
appropriate XML data. Through the rest of the chapter, we’ll implement appropriate
consumers for each of the platforms described, will show us how to connect the
specified platform with Java in an asynchronous way.
在第3章中,我们创建了一个portfolio example示例程序.该示例程序使用了映射消息用于消息生产者
和消费者之间的数据交换.为了阐述本章内容,我们将修改远离的示例程序,使其更好的适应本章的开发
环境.我们将使用文本格式的XML消息替代映射消息(Map),因为xml格式消息是本章中开发环境(比如
动态语言)里面更常用通信载体.因此,我们将创建一个Java消息生产者用来发送适当的xml格式的文本
消息.本章的其余部分里,我们将根据不同的平台创建合适的消息消费者,它们将演示如何使用Java以
异步方式连接到指定的平台.
For starters, we have to modify our publisher to send XML data in text messages
instead of map messages. The only thing we have to change from our original publisher
is the createStockMessage() method. Listing 9.1 shows the method that creates
an appropriate XML representation of desired data and creates a TextMessage
instance out of it.
本章开始时,我们必须修改我们的消费生产者类publisher以便发送xml格式的文本消息替代
原来的映射消息(map).原始的publisher类中唯一需要修改的地方是createStockMessage()
方法.代码清单9.1中展示了创建xml格式消息表示所需的数据,并创建一个TextMessage实例.
Listing 9.1 Modified stock portfolio publisher that sends messages as XML payloads
代码清单9.1 修改后的stock portfolio例子中publisher用于发送xml格式的payload消息
protected Message createStockMessage(String stock, Session session) throws JMSException, XMLStreamException
{
Double value = LAST_PRICES.get(stock);
if (value == null)
{
value = new Double(Math.random() * 100);
}
// lets mutate the value by some percentage
double oldPrice = value.doubleValue();
value = new Double(mutatePrice(oldPrice));
LAST_PRICES.put(stock, value);
double price = value.doubleValue();
double offer = price * 1.001;
boolean up = (price > oldPrice);
StringWriter res = new StringWriter();
XMLStreamWriter writer = XMLOutputFactory.newInstance().createXMLStreamWriter(res);
writer.writeStartDocument();
writer.writeStartElement("stock");
writer.writeAttribute("name", stock);
writer.writeStartElement("price");
writer.writeCharacters(String.valueOf(price));
writer.writeEndElement();
writer.writeStartElement("offer");
writer.writeCharacters(String.valueOf(offer));
writer.writeEndElement();
writer.writeStartElement("up");
writer.writeCharacters(String.valueOf(up));
writer.writeEndElement();
writer.writeEndElement();
writer.writeEndDocument();
TextMessage message = session.createTextMessage();
message.setText(res.toString());
return message;
}
As you can see, we’ve used a simple StAX API (http://mng.bz/0S2s) to create an XML
representation of our stock data. Next, we created a text message and used the set-
Text() method to associate this XML to the message.
正如你看到的,我们使用了简单的StAX API (http://mng.bz/0S2s)创建了一个XML文档代表我们
的股票数据.然后,我们创建了一个文本消息,并使用setText()方法将这个XML文档内容设置到消息
中.
Now we can start our publisher in the standard manner:
现在可以使用下面的命令启动publisher:
$ mvn exec:java -Dexec.mainClass=org.apache.activemq.book.ch9.Publisher -Dexec.args="IONA JAVA"
and expect the following output:
下面是输出信息:
Sending:
<?xml version="1.0" ?>
<stock name="JAVA">
<price>81.987225215383</price><offer>82.069212440599</offer>
<up>false</up>
</stock>
on destination: topic://STOCKS.JAVA
Sending:
<?xml version="1.0" ?><stock name="IONA">
<price>16.2205230479432</price><offer>16.236743570991</offer>
<up>false</up>
</stock>
on destination: topic://STOCKS.IONA
Sending:
<?xml version="1.0" ?><stock name="JAVA">
<price>82.70353458512</price><offer>82.786238119706</offer>
<up>true</up>
</stock>
on destination: topic://STOCKS.JAVA
Sending:
<?xml version="1.0" ?><stock name="IONA">
<price>16.264366325962</price><offer>16.280630692288</offer>
<up>true</up>
</stock>
on destination: topic://STOCKS.IONA
Sending:
<?xml version="1.0" ?><stock name="JAVA">
<price>83.341791666986</price><offer>83.425133458653</offer>
<up>true</up>
</stock>
on destination: topic://STOCKS.JAVA
Sending:
<?xml version="1.0" ?><stock name="JAVA">
<price>83.891272205115</price><offer>83.975163477321</offer>
<up>true</up>
</stock>
on destination: topic://STOCKS.JAVA
As expected, the publisher sends a series of XML-formatted text messages to different
ActiveMQ topics. As they’re ready to be consumed, it’s time to see how we can consume
them using different programming languages and platforms.
正如所料,发布者publisher发送一系列XML格式的文本消息到不同的ActiveMQ的主题。
因为这些消息已经准备好被接收和处理了,下面是时候看看我们如何在不同的平台使用不同
编程语言来接收和处理这些消息.
相关推荐
【标题】"Portfolio_example_sass:使用Sass的Portfolio示例"揭示了这是一个关于使用Sass(Syntactically Awesome Style Sheets)构建个人投资组合项目的案例。Sass是一种CSS预处理器,它允许开发者使用变量、嵌套...
Node.js,Backbone,Gulp和Browserify Boilerplate应用程序。 该应用程序旨在成为使用Express和Backbone启动Node.js项目的样板。 要运行,只需运行“ npm install”和“ bower install”(用于引导程序依赖项),...
"stock-portfolio" 是一个专为此目的设计的应用程序,它允许用户实时监控其股票投资组合的历史表现。这个应用程序的核心是利用JavaScript编程语言,这使得它可以在Web浏览器上无缝运行,为用户提供方便快捷的方式来...
Finance,一个网络应用程序,您可以通过它管理股票投资组合。 该工具允许您检查真实股票、实际价格和投资组合价值,它还可以让您通过查询 IEX 的股票价格来买入(好吧,“买入”)和卖出(好吧,“卖出”)股票。 您...
Portfolio management is an ongoing process of constructing portfolios that balances an investor’s objectives with the portfolio manager’s expectations about the future. This dynamic process provides...
1. "Project26.exe" - 这通常是Windows平台上编译后的可执行文件,也就是 Stocks Portfolio 应用程序本身。 2. "Project26.vbp" - 这是Visual Basic for Applications(VBA)或Visual Basic 6(VB6)的项目文件,...
本篇将深入探讨如何利用Matlab进行投资组合优化,结合名为"portfolio_examples.rar"的压缩包中的代码实例,包括`portfolio_examples.m`、`displaySumOfTransactions.m`和`displayPortfolio.m`三个文件,我们将逐步...
Multi-period portfolio optimization using coherent fuzzy numbers in a credibilistic environment Multi-period portfolio optimization using coherent fuzzy numbers in a credibilistic environment
在本压缩包“Portfolio:我编写的代码示例”中,我们可以看到一系列的代码示例,这是一位开发者在大学期间以及进行小型项目时所编写的。这个“Portfolio-master”文件夹很可能包含了各种Java编程的实践作品,展示了...
【标题】"前端项目-startbootstrap-stylish-portfolio.zip"是一个包含前端开发资源的压缩包,主要用于构建一个具有时尚设计风格的单页引导组合网站。Start Bootstrap是一个知名的在线模板库,提供了一系列基于...
QEPM.偏学术界的作者撰写的关于量化股票组合投资的系统教程。尤其是前几章概述部分写得非常精彩、易懂、准确。把该领域的各个方面高屋建瓴地串讲了一遍。后面部分的章节似乎略有些学术了,但也值得一读。...
数据分析组合包含我为自学和业余爱好而完成的数据分析项目组合的存储库。 以iPython Notebooks的形式呈现。内容数据分析与可视化:分析以查找A / B组之间的统计差异。 工具:熊猫,Seaborn和?
【DevonLayton:Github Pages托管的React Portfolio应用程序】 在现代前端开发中,个人作品集网站已经成为展示开发者技能和项目的重要平台。DevonLayton的React Portfolio应用程序就是一个很好的例子,它利用了...
Wordpress Portfolio模板是一款专为展示个人或团队作品集设计的网页模版,广泛应用于设计师、开发者、摄影师等创意专业人士的网站。它具有高度自定义、响应式布局和丰富的功能特性,帮助用户创建一个吸引眼球、专业...
stock_portfolio [FLAGS] [OPTIONS] --stocks FLAGS: -d, --desc Used with order by option to sort in descending order -h, --help Prints help information -g, --show-groupby Show quantities and ...
Portfolio Management with R Enrico Schumann http://enricoschumann.net/R/packages/PMwR/manual/PMwR.html 连接可以免费下载相关资料
这款软件是Microsoft Office Project产品线的一部分,与Office其他应用程序如Excel、Word和Outlook等无缝集成,提升工作效率。 ### 主要特点和功能 1. **项目组合自动化管理**: Project Portfolio Server 2007...
"portfolio:Yoonho Park的Portfolio Web应用程序" 暗示这是一个个人作品集网站,由Yoonho Park开发。这个网站可能是他展示个人技能、项目经验、设计作品或者编程成就的一个在线平台。标题中的"Portfolio"通常指的是...
这意味着使用、复制、披露、修改和适应程序需遵循Oracle许可协议的条款,以及FAR 52.227-19中的附加权利。 通过理解这些关键知识点,用户和管理员能够更有效地利用Oracle Personal Portfolio Management来提升投资...
about the quantitative side of equity portfolio management, mainly portfolio optimization and risk analysis. Mean-variance portfolio optimization is covered in detail, leading to an extensive ...