关于Flex的MessageBroker End…

MessageBroker 我们称他为信息经纪人,它职责就是把messages 发给到services 就是我们的程序服务,它是BlazeDs在服务器上的核心。endpoint 处理完一个request,也即是把messages 从request抽取出来,然后传给MessageBroker ,然后MessageBroker 就检测这个消息的destination ,接着把它传给它想到的服务目的地。假若我们的服务有安全保护,MessageBroker 要先运行authentication ,authentication 是在信息传递前先做check。你要在你BlazeDS WEB应用WEB-INF/web.xml 文件中配置你的MessageBroker。
Endpoints
BlazeDS 基于servlet的Endpoints(端点)是在J2EE servlet container中的,这就意味着 servlet 为 endpoints操纵着 the I/O and HTTP sessions ,实际上Endpoints被MessageBrokerServlet控制,除了MessageBrokerServlet,我们的 J2EE server还在web.xml文件中注册一个 HTTP session 监听者,以使BlazeDS 有监听的属性,和支持。BlazeDS Flex 客户端用channels (通道)和endpoints通信,在服务器上,channels 和endpoints有一对一的对应关系,也许因为他们两个用的数据格式要一样。比如一个channels 用 AMF消息格式,如AMFChannel格式,必须有一个也用这种格式的endpoints与它配对。同样一个用了AMFX 格式的channels 也要求有一个同样格式的endpoint。你要在你BlazeDS WEB应用WEB-INF/flex directory的 services-config.xml 文件中配置你的endpoints。
channels
channels 是客户端的对象,它把FLEX组件和 BlazeDS server端的勾通封装起来。channels和与之在blaze Server上对应的endpoint通信。你可以在services-config.xml 文件中配置channel的各个属性和对应的endpoint。
如下channel 定义代码:

...

http://servername:8400/myapp/messagebroker/amf" type="flex.messaging.endpoints.AMFEndpoint"/>


你就创建了一个AMFChannel与服务器端的AMFEndpoint的通信channel。
其中endpoint URL 是endpoint暴露给外边可以访问的地址。channel用它和endpoint交互。这个url必须是唯一的,在所有服务器上暴露的endpoints中,这个url值指向MessageBrokerServlet。
怎样给flex component分配channel
flex components 用ChannelSet设定channel,它里面可以包括多个channel,去和server 交互。你可以选择自动和手动分配channel 给flex 组件。假如你在编译你的MXML文件时,把你的compiler 配置上 -services 选 项让它指向services-config.xml 文件,那么你的组件(如RemoteObject, HTTPService等)就自动分配一个配置好的channel实例, 这个channel是根据你在services-config.xml 文件中定义好的包括destination。第二种情况如果你不想在你的compiler 中设置什么-services
选项,你可以在 MXML or ActionScript中手动创建你的channel,然后把它分配给你的flex components。如果你也不想自己配置channel,Application-level 默认channels这时就会被用到。
如下代码自己手动定义channel
in mxml:



http://localhost:8080/demo/messagebroker/amf"/>



in ActionScript:
private function run():void {
ro = new RemoteObject();
var cs:ChannelSet = new ChannelSet();
cs.addChannel(new AMFChannel("myAmf", " http://locahost:8080/demo/messagebroker/amf"));
ro.destination = "Dest";
ro.channelSet = cs;
}
注意当你在客户端分配设置了channel 并指定了channel type 和 endpoint URL,但并没有
指定handles 请求的endpoint class。所以这时你还要在services-config.xml中定义你用的这个channel,指明它的url 用到的endpoint class。
把channel和endpoint分配给destination
(前面不是提到在services-config.xml中配置了一系列 的吗,然后下面就可以在message- config.xml 中引用配置好的channel进行通信了。原文是在service-config.xml中配置的,这点也可以配在message-config.xml 中)
我们用channel和endpoint目的就是把我们的从client传过来的东西送到目的地destination。说到给destination分channel我们可以分 以下几中情况。
1,在所有services中的大多数destinations用同样的channels。我们可能定义应用级别(application-level)默认channels在services-config.xml文件中。如

...




...

这样所有没定义channel的destinations就会用上面定义的默认channel,当然destinations和services都可以重载默认 channel,通过指明自己的channel。
2.在一个service中的大多数destinations用同样的channels。我们可以定义服务级别(service-level )默认channels在services-config.xml文件中。如

...




...

这样以来,在一个service中没有指定channel的destination就会用到本服务内的默认channels.
3.一个destination 定义自己的channel.代码如下:




...

BlazeDs 基于消息的framework
blazeds 是利用基于消息的框架完成数据在客户端和服务器之间来回传递的。实际上blazeds用二种最重要的数据交换模式。第一种就是请求响应模式。
第二种模式就是发布订阅模式。在这模式下,服务器把published的信息发送给一系列订阅了这些信息的customer。举例说Messaging Service就是用这种方式把data发给对data感兴趣的client,当然Messaging Service也用 request-response pattern去与client玩。
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值