this scrap is a traslation from http://livedocs.adobe.com/blazeds/1/blazeds_devguide/
MessageBroker
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 定义代码:
<channels>
...
<channel-definition id="samples-amf"
type="mx.messaging.channels.AMFChannel">
<endpoint url="http://servername:8400/myapp/messagebroker/amf" type="flex.messaging.endpoints.AMFEndpoint"/>
</channel-definition>
</channels>
你就创建了一个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:
<RemoteObject id="ro" destination="Dest">
<mx:ChannelSet>
<mx:channels>
<mx:AMFChannel id="myAmf" uri="http://myserver:2000/myapp/messagebroker/amf"/>
</mx:channels>
</mx:ChannelSet>
</RemoteObject>
in ActionScript:
private function run():void {
ro = new RemoteObject();
var cs:ChannelSet = new ChannelSet();
cs.addChannel(new AMFChannel("myAmf", "http://servname:2000 /eqa/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
我们用channel和endpoint目的就是把我们的从client传过来的东西送到目的地destination。说到给destination分channel我们可以分以下几中情况。
1,在所有services中的大多数destinations用同样的channels。我们可能定义应用级别(application-level)默认channels在services-config.xml文件中
。如
<services-config ...>
...
<default-channels>
<channel ref="my-http"/>
<channel ref="my-amf"/>
</default-channels>
...
</services-config >
这样所有没定义channel的destinations就会用上面定义的默认channel,当然destinations和services都可以重载默认 channel,通过指明自己的channel。
2.在一个service中的大多数destinations用同样的channels。我们可以定义服务级别(service-level )默认channels在services-config.xml文件中。如
<service ...>
...
<default-channels>
<channel ref="my-http"/>
<channel ref="my-amf"/>
</default-channels>
...
</service>
这样以来,在一个service中没有指定channel的destination就会用到本服务内的默认channels.
3.一个destination 定义自己的channel.代码如下:
<destination id="sampleVerbose">
<channels>
<channel ref="my-secure-amf"/>
</channels> ...
</destination>
BlazeDs 基于消息的framework
blazeds 是利用基于消息的框架完成数据在客户端和服务器之间来回传递的。实际上blazeds用二种最重要的数据交换模式。第一种就是请求响应模式。PRC就
是用的这种模式,这个我前几天自己摸个CRUD例子出来。推销一下:http://download.csdn.net/source/1527797(这个例子要求你自己要写个Uint bean,另外要把
你的Flex编译器设置-services 选项并指向services-config.xml文件)。
第二种模式就是发布订阅模式。在这模式下,服务器把published的信息发送给一系列订阅了这些信息的customer。举例说Messaging Service就是用这种方式
把data发给对data感兴趣的client,当然Messaging Service也用 request-response pattern去与client玩。
相关推荐
1. **Flex 与 Spring 集成**:Spring Flex 提供了 `RemotingDestination` 和 `MessageBroker`,使得 Flex 客户端可以通过 AMF(Action Message Format)协议与 Spring 上下文中的bean进行交互。这简化了数据传输,...
将Flex与JSP结合,主要通过Adobe的Flex Message Broker(FMB)或Flex Web Tier(FWT)实现。这些组件作为桥梁,允许Flex客户端与Java后端进行通信。在描述中提到的"通过JSP的TAGLIB实现的",指的是使用JSP的自定义...
在这个例子中,URL为`http://{server.name}:{server.port}/{context.root}/messagebroker/amflongpolling`,这通常会指向Flex MessageBroker服务,而`AMFEndpoint`类则表示AMF协议将被用于通信。 在`<properties>`...
3. **调试服务端:** 使用浏览器访问Java服务端点的URL(例如`http://localhost:8080/flexweb/messagebroker/amf`),确保服务可以正常响应。 #### 二、类型创建失败 另一个常见的问题是在尝试调用后端Java类时...
1. **MessageBroker**: 这是Flex消息传递系统的中心,它管理消息的路由,调度和处理。MessageBroker实例化并配置了各种服务,如HTTP、HTTPS、RTMP和WebSocket等通道,以便通过这些通道发送和接收消息。 2. **...
在Flex端订阅消息的核心在于使用 BlazeDS 的 MessageBroker 服务,它提供了AMF(Action Message Format)通道,使得Flex客户端可以与服务器端的业务逻辑进行高效的数据交换。下面我们将深入探讨如何实现这个功能。 ...
为了确保来自Flex客户端的请求能够被正确地路由到Message Broker,需要设置适当的请求映射。这可以通过以下方式实现: - 在Spring配置文件中定义`@Controller`类来处理特定的请求路径。 - 配置`@RequestMapping`注解...
在Spring的配置文件中,需要配置MessageBroker以支持与Flex客户端的通信。 ```xml xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:messagebroker=...
通过URL映射机制将来自Flex客户端的请求转发至相应的Message Broker进行处理。 **使用Spring管理的目的地从Flex客户端:** 可以利用Spring管理的目的地(Destination)来简化Flex客户端与后端服务之间的交互过程。...
5. **MessageBroker**: Spring Flex 使用 BlazeDS 的 MessageBroker 组件来处理 Flex 客户端的请求,通过定义消息通道(channels)和消息目的地(destinations),可以轻松地配置 Flex 与 Spring 服务的连接。...
为了连接Spring服务和Flex客户端,你需要在Spring配置文件中定义一个MessageBroker bean。MessageBroker是BlazeDS的核心组件,它处理AMF通道和消息的路由。同时,配置Spring的RemotingDestination,这样Flex客户端就...
- ** BlazeDS的MessageBroker**:MessageBroker允许Flex应用通过HTTP或HTTPS通道使用HTTP长轮询、WebSocket或StreamingAMF等方式与服务器进行双向通信。 3. **C#服务器端配合Flex通信** - **C#与AMF**:在C#中,...
3. **MessageBroker**:这是Flex Messaging的核心组件,它处理消息路由和传递,允许客户端和服务器之间进行异步通信。MessageBroker通过HTTP、HTTPS或RTMP(Real-Time Messaging Protocol)协议进行通信。 4. **...
<endpoint url="http://{server.name}:{server.port}/{context.root}/messagebroker/amfpolling" class="flex.messaging.endpoints.AMFEndpoint"/> <polling-enable>true ``` 2. **配置Spring**: 在...
import flex.messaging.MessageBroker; import flex.messaging.endpoints.AMFEndpoint; public class FlexServer { public void setupMessageBroker(MessageBroker broker) { AMFEndpoint endpoint = ...
<url-pattern>/messagebroker/amf ``` 在`services-config.xml`中,我们可以定义远程服务,指定JSP服务的URL和方法。 **四、实际操作步骤** 1. 创建Flex项目并编写`flex.xml`,配置与JSP服务的连接。 2. 在JSP...
BlazeDS是Adobe提供的一个开源项目,它为Java服务器和Flex客户端之间的数据交换提供了丰富的功能,包括Remoting、MessageBroker和LiveCycle Data Services的部分功能。在本场景中,我们将探讨如何利用BlazeDS和Flex...
3. `<servlet-mapping>`标签设置了`MessageBrokerServlet`的URL模式,即`/messagebroker/*`,这意味着所有以`/messagebroker/`开头的请求都将由`MessageBrokerServlet`处理。 4. `welcome-file-list`指定了默认的...
这样,Flex客户端可以通过`/messagebroker/amf` URL与服务器进行数据交换。 4. **定义服务**:在`services-config.xml`文件中,定义Flex客户端与Java后端的连接点,包括通道设置和服务定义。 5. **编写Flex代码**...