0

1で指定されたチュートリアルに従おうとします。それぞれ sqlFilter (user_age < 50) および (user_age>= 50) を使用して、トピックに 2 つのサブスクリプションを持つ 1 つのトピックを作成しました。メッセージ用にカスタム プロパティ user_age を定義しました。しかし、トピックに関するメッセージを送信すると、両方のサブスクリプションが同じメッセージを受け取りますが、これはナンセンスです! 何か案が?

私のコードは、このコードを使用して特定のサブスクリプションからメッセージを受信することを除いて、チュートリアルで指定されたものから完全にインスピレーションを得ています。

resultQM = service.receiveSubscriptionMessage("MyTopic", subName, opts);
4

1 に答える 1

0

そのチュートリアルのコードは正しく機能しません。ユーザー定義のカスタム プロパティ "MessageNumber" の値を実際にフィルター処理する 2 つのサブスクリプション (LowMessages と HighMessages) を作成するために使用した Java コードを次に示します。これが機能することがわかりました。ruleInfo に明示的に名前 (「RULENAME」) を付ける必要があり、サブスクリプションのデフォルトの「AllMatch」ルールも明示的に削除する必要があることに注意してください (そうしないと、フィルタリングが行われません)。

  SubscriptionInfo subInfo = new SubscriptionInfo("LowMessages");
  CreateSubscriptionResult result = service.createSubscription("TestTopic", subInfo);
  RuleInfo ruleInfo = new RuleInfo("RULENAME");
  ruleInfo = ruleInfo.withSqlExpressionFilter("MessageNumber <= 3");
  CreateRuleResult ruleResult = service.createRule("TestTopic", "LowMessages", ruleInfo);
  service.deleteRule("TestTopic", "LowMessages", "$Default");

  SubscriptionInfo subInfo2 = new SubscriptionInfo("HighMessages");
  CreateSubscriptionResult result2 = service.createSubscription("TestTopic", subInfo2);
  RuleInfo ruleInfo2 = new RuleInfo("RULENAME2");
  ruleInfo2 = ruleInfo2.withSqlExpressionFilter("MessageNumber > 3");
  CreateRuleResult ruleResult2 = service.createRule("TestTopic", "HighMessages", ruleInfo2);
  service.deleteRule("TestTopic", "HighMessages", "$Default");
于 2013-06-12T22:42:03.710 に答える