o**2 发帖数: 168 | 1 我刚完成FMP3的Java版,就写了一个小小的DEMO,叫做M123,来展示其分布式编程的基
本能力和风格。
FMP3之前的是FMP2,其重点是把一个POJO(plain old object)立即包装成一个service
。这是一个和web service类似的service,有自己的identity和能独立运行。这样,当
一个程序中有多个这样的services后,整个程序就能展现出并发性了。
下面就是一个POJO的class:
public class Calculator {
public BigInteger multiply (BigInteger n1, BigInteger n2) {
return n1.multiply (n2);
}
}
下面这两行展示如何建立一个service:
DefaultMessenger messenger = new DefaultMessenger ("m1");
messenger.createService (new Calculator (), "calc", "multiply");
下面这两行展示如何使用上面已经建立的service(token就是类似的future):
Result token = messenger.callService ("m1 :: calc : multiply",
n1, n2);
BigInteger product = token.get (); // blocking
FMP3解决的是如何让在FMP2阶段里建立起来的services,能在分布式的环境里,被在任
何一个角落里的调用者,用和调用local service同样的方式来调用。
M123的得名是因为它包含3个不同的程序:M1、M2、和M3,每一个都将在其各自的JVM中
运行,并各有一个同名的messenger:"m1"、"m2"、和"m3"。M1、M2、和M3之间用一个
socket来连接:M1连M2,M2连M3。这样M1和M3是经由M2间接连接起来的。(请参照下图
。)
M123共有3个test cases,都在M1里面。它们使用完全相同的API,分别调用不同JVM中
的service:
messenger.callService ("m1 :: calc : multiply", n1, n2);
messenger.callService ("m2 :: calc : multiply", n1, n2);
messenger.callService ("m3 :: calc : multiply", n1, n2);
http://fastmessenger.com/files/javanet/M123.zip
请自行观察运行结果(先运行M3,然后M2,最后M1)。 | z*******3 发帖数: 13709 | | o**2 发帖数: 168 | 3 补充一点:FMP是跨语言的,一个JavaScript写的service(在browser里或在Node.js里
),和一个Java写的service,在调用者眼里是没有区别的。 |
|