Messaging Service流程图
Messaging Service架构图
Channels
可以使用的实时channal(Real-time channels )有启用polling 的RTMPChannel , AMFChannel 和 HTTPChannel ,还有StreamingAMFChannel 和 StreamingHTTPChannel 。其中RTMPChannel 是绝对实时的,一直保持着 客户端和服务器端的socket连接 。
<channel-definition id="my-polling-amf" class="mx.messaging.channels.AMFChannel"> <endpoint url="http://{server.name}:{server.port}/{context.root}/messagebroker/amfpolling" class="flex.messaging.endpoints.AMFEndpoint"/> <properties> <polling-enabled>true</polling-enabled> <polling-interval-seconds>8</polling-interval-seconds> </properties> </channel-definition>
Adapters
LCDS为Messaging Service提供了三种adapter:
- ActionScriptAdapter :当需要在各个客户端之间发送/接收AS3对象 的时候使用
- JMSAdapter :它搭建了从destination到JMS destination的通道,使得Flex客户端可以直接同JMS服务器通信
- A custom adapter :使你可以创建一个adapter来同其他的messaging implementations或者你自定义的实现来进行交互
Working with Producer components
- 确定发布消息是否成功,acknowledge 和 fault
- Producer.requestTimeout 可以设置请求的超时时间
- 当请求发送成功后 Producer.connected 的值会被设为true
var message:AsyncMessage = new AsyncMessage();
message.body = new Object();
message.body.uName = userName.text;
message.body.uInput = input.text;
producer.send(message);
Working with Consumer components
- 使用 message 和 fault 来确认消息是否订阅成功
- resubscribeAttempts :Consumer 在目标不可用或连接到目标失败的情况下进行的重新订阅尝试次数
- resubscribeInterval :重新订阅尝试之间间隔的毫秒数
- 当订阅成功后 Consumer.subscribed 的值会被设为true
- 如果使用non-real-time channel,例如一个polling-enabled 值为false 的AMFChannel ,可以先 调用subscribe() 订阅这则消息,然后 调用receive() 来接收消息
-
接收消息:如果Consumer使用的是实时轮询
或流通道
,那么无需
向服务器发出初始化请求
,消息会自动地发送到Consumer;然而,如果我们使用非实时通道
,例如没有启用轮询的AMF通道
(polling-enable=false的AMFChannel) ,那么必须调用Consumer.receive()
方法来直接向服务器端发出请求以接收消息队列中的数据
consumer.subscribe();
private function messageHandler(event:MessageEvent):void {
// Handle message event.
ta.text = String(event.message.body.uName) + " ," +
String(event.message.body.uInput);
}