【问题标题】:service bus subscription on topic don't apply filter主题的服务总线订阅不应用过滤器
【发布时间】:2012-06-16 05:35:45
【问题描述】:

我尝试按照1 的给定教程进行操作。我创建了一个主题,主题上有 2 个订阅,分别使用 sqlFilter (user_age = 50)。我为消息定义了一个自定义属性 user_age。 但是当我发送关于该主题的消息时,两个订阅都会收到相同的消息,这是无稽之谈! 任何想法?

我的代码完全受教程中给出的启发,但我使用此代码接收来自给定订阅的消息:

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

【问题讨论】:

  • 您可以发布创建 2 个订阅的代码吗?
  • 这是一个订阅的代码,另一个类似我已经减少了空间......谢谢;)SubscriptionInfo subInfo1 = new SubscriptionInfo("High_Ages"); CreateSubscriptionResult result1 = serviceBusContract.createSubscription(topicName, subInfo1); ruleInfo1 = ruleInfo1.withSqlExpressionFilter("user_age >= 50"); CreateRuleResult ruleResult = serviceBusContract.createRule(topicName, "High_Ages", ruleInfo1);
  • 这段代码看起来不错。您能否也发布您用于创建发送消息的代码?
  • 这是发送消息代码...BrokeredMessage message=new BrokeredMessage(body); message.setProperty("name", name); message.setProperty("user_age", Integer.parseInt(age)); double ttl=86400; message.setTimeToLive(ttl); serviceBusContract.sendTopicMessage(topic, message); 姓名和年龄值通过 html 表单提交
  • 你能删除 Integer.parseInt 部分吗?并且只需拥有:message.setProperty("user_age", age);

标签: azure azureservicebus


【解决方案1】:

该教程中的代码无法正常工作。这是我用来创建两个订阅(LowMessages 和 HighMessages)的 Java 代码,它们实际上过滤了用户定义的自定义属性“MessageNumber”的值。我发现这行得通。请注意,您需要为 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");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-03
    • 1970-01-01
    • 2018-08-27
    • 2016-02-10
    • 2016-12-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多