用 STOMP 集成 Flex3.0 和 RabbitMQ

  • Moxie Zhang
  • 宋玮

2008 年 3 月 16 日

话题:Java语言 & 开发架构

Flex on Rails上张贴的一篇文章中,Derek Wischusen 与我们分享了他使用ActionScript 3 STOMP 客户端RabbitMQ与 Flex 3 集成在一起的试验。

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"  />

...

private function init () : void



{

var ch: ConnectHeaders = new ConnectHeaders();

ch.login = "guest";

ch.passcode = "guest"

stomp.connect("localhost", 61613, ch);

}

...

private function sendImage():void

{

var image: ByteArray = ImageSnapshot.captureImage(canvas).data;

stomp.send(destination, image);

}

在 ImageReceiver 方面:

"stomp" message="handleMessages(event)"  />

...

private var destination: String = "/queue/images";

private function init () : void



{

var ch: ConnectHeaders = new ConnectHeaders();

ch.login = "guest";

ch.passcode = "guest"

stomp.connect("localhost", 61613, ch);

stomp.subscribe( destination );

}

...

private function handleMessages(event : MessageEvent) : void



{

var bd: BitmapData = new BitmapData(canvas.width, canvas.height);

var loader : flash.display.Loader = new flash.display.Loader();

loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onBytesLoaded);

loader.loadBytes(event.message.body);

function onBytesLoaded (event : Event) : void

{

var content : 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 应用概念的 一个有趣的演示。

查看英文原文:Integrating Flex 3.0 and RabbitMQ Using STOMP

Java语言 & 开发架构