2008年(3500)
分类:
2008-05-04 23:26:29
RabitMQ是一个开源的企业消息传递系统:
RabitMQ是一个完整的、高可靠的企业消息传递系统。RabbitMQ客户端类库及后台程序(broker daemon)可一起被用于创建一个AMQP网络,或者单独使用它们以便给建立起来的网络带来RabbitMQ的好处。
RabitMQ是AMQP协议的实现,该协议是消息传递中间件的一个开放标准。STOMP则是面向流文本的消息传递协议。Wischusen所尝试的是去利用RabbitMQ的STOMP适配器。
为了使读者理解该试验是如何工作的,Wischusen给我们共享了相应的资源和源代码:
接下来,Wischusen解释了这个Flex例子项目到底实现了什么:
该项目有两个单独的应用组成:ImageSender和ImageReceiver。该项目文件也包含了已编译的as3-stomp类库,这样你就无需单独下载它了。
ImageSender和ImageReceiver应用将通过STOMP协议使用RabbitMQ交换消息来进行通讯。为了证明来自两个应用的Flex代码是如何与STOMP客户端一起工作的,Wischusen分享了这一代码片断。
在ImageSender方面:
"stomp" />
...
privatefunctioninit () :void
{
varch: ConnectHeaders =newConnectHeaders();
ch.login ="guest";
ch.passcode ="guest"
stomp.connect("localhost", 61613, ch);
}
...
privatefunctionsendImage():void
{
varimage: ByteArray = ImageSnapshot.captureImage(canvas).data;
stomp.send(destination, image);
}
在ImageReceiver方面:
"stomp" message="handleMessages(event)"/>
...
privatevardestination: String ="/queue/images";
privatefunctioninit () :void
{
varch: ConnectHeaders =newConnectHeaders();
ch.login ="guest";
ch.passcode ="guest"
stomp.connect("localhost", 61613, ch);
stomp.subscribe( destination );
}
...
privatefunctionhandleMessages(event: MessageEvent) :void
{
varbd: BitmapData =newBitmapData(canvas.width, canvas.height);
varloader : flash.display.Loader =newflash.display.Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onBytesLoaded);
loader.loadBytes(event.message.body);
functiononBytesLoaded (event: Event) :void
{
varcontent : DisplayObject = LoaderInfo(event.target ).content;
bd.draw( content );
canvas.graphics.beginBitmapFill(bd);
canvas.graphics.drawRect(0,0, canvas.width, canvas.height);
canvas.graphics.endFill();
}
}
该试验示范了一个图像是如何从Flex应用端(ImageSender)被捕获的,该图像怎么被发送至RabbitMQ服务器,消息如何被发送到消息消费者应用(ImageReceiver),以及这个消息怎样触发了一个事件而从RabbitMQ服务器装载这个图像。这是面向消息的RIA应用概念的 一个有趣的演示。
下载本文示例代码