Flex BlazeDS消息实现注意

发送消息的示例代码如下:

var message:AsyncMessage = new AsyncMessage();
            message.body = {userId:"student" , text:”hello”}
            producer.send(message); 


在接收前必须调用consumer.subscribe();  来订阅主题。

接收消息的示例代码如下:

private function messageHandler(event:MessageEvent):void
        {
            trace(event.message.body.userId + ": " + event.message.body.text + "\n");                
        } 



【使用副主题来过滤消息】
副主题能力可以让你将P发送的消息分解成指定的种类。你可以配置订阅的C来接收指定的副主题或者一系列副主题。使用广义字符(*)来发送或接收多于一个的副主题。

在P的subtopic属性中指定副主题。
var message:AsyncMessage = new AsyncMessage();
producer.subtopic = "chat.john";
producer.destination="ChatTopic"
// Generate message.
producer.send(message);
在C的subtopic属性中指定C想订阅的副主题。

consumer.destination = "ChatTopic";
consumer.subtopic = "chat.john";
consumer.subscribe();
如果想允许副主题,必须在配置文件的destination的定义中将allow-subtopics设置为true,需要注意的是副主题分隔符在<subtopic-separator>.</subtopic-separator>里面定义。

【用消息选择器过滤消息】你可以使用C的selector属性来过滤收到的消息。一个消息选择器就是一个字符串,它包含了SQL的条件表达式。这样C只接收消息头与选择器的规范相符合的消息。

将额外的信息包含在消息头内,消息头包含关联数组,键就是头名。

AS代码:

var message:AsyncMessage = new AsyncMessage();
message.headers = new Array();
message.headers["prop1"] = 5;
message.body = ...;
producer.send(message);


java代码:
MessageBroker msgBroker = MessageBroker.GetMessageBroker(null);
AsyncMessage msg = new AsyncMessage();
msg.destination = ...;
msg.headers.Add("prop1", 5);
msg.clientId = Guid.NewGuid().ToString("D");
msg.messageId = Guid.NewGuid().ToString("D");
msg.timestamp = Environment.TickCount;
msg.body = ...;
msgBroker.RouteMessage(msg);


消息选择器与消息体无关。它只过滤消息头内的值域和属性值。

评估的过程是从左向右,括号可以改变顺序。
选择器元素 描述 例子
文字 单引号引起来的文字
确切的没有小数点的数字(57, -57)
用科学计数法表示的近似数字(-57.9E2),有小数的数字(57.2)
Boolean型文字 TRUE 和 FALSE
标识符 标识符使用C#的标识语法,大小写敏感,标识符不能是以下名字NULL, TRUE, FALSE, NOT, AND, OR, BETWEEN, LIKE, IN, IS
表达式 选择器就是一个条件表达式,评估得true的就匹配,如果为false或者unknown的就不匹配。()用来规范评估的顺序。逻辑操作的优先顺序为:NOT, AND, OR。比较操作符如下:=, >, >=, <, <=, <> "p1 < 23"
"p1 = 1 OR p1 = 2"
数学操作符 +, - 正负号,*, / 乘除,+, - 加减
BETWEEN arithmetic-expr1 [NOT] BETWEEN arithmetic-expr2 AND arithmetic-expr3 "1 BETWEEN -1 AND 2"
"p1 BETWEEN -1 AND (2-5)"
"age BETWEEN 15 AND 19"
IN identifier [NOT] IN (string-literal1, string-literal2,... ) "1 IN (1,2,3)"
"p1 NOT IN (1,2,3)"
"Country IN (' UK', 'US', 'France')"
LIKE identifier [NOT] LIKE pattern-value [ESCAPE escape-character]  "phone LIKE '12%3'"
IS 测试null "user IS NOT NULL"


你可能感兴趣的:(sql,C++,c,Flex,C#)