当前位置: 首页 > 知识库问答 >
问题:

主题上的服务总线订阅不应用筛选器

卓正业
2023-03-14

我试着按照1给出的教程学习。我创建了一个主题,其中有两个主题的订阅,分别使用sqlFilter(user_age<50)和(user_age>=50)。我为消息定义了一个自定义属性user_age。但当我发送关于这个主题的消息时,两个订阅都收到相同的消息,这是胡说八道!知道吗?

我的代码完全是从tuto中给出的代码中获得灵感的,只是我使用这段代码接收来自给定订阅的消息:

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

共有1个答案

廉子民
2023-03-14

教程中的代码不能正常工作。下面是我用来创建两个订阅(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");
 类似资料:
  • 我试图遵循Mark Heath的控制台应用程序示例,使用筛选后的订阅检索服务总线主题消息。但是,我实际上无法检索实际筛选的消息(Filtered1、Filtered2)。消息确实会被使用,但我无法查看它们,因为代码从未像处理非过滤消息(AllMessages)那样进入回调函数。对我错过了什么有什么想法吗? 发件人代码 接收机代码

  • 我之所以要这样做,是因为我们的服务在部署时配置订阅规则,并且具有消息代理的服务可能会在具有订阅客户端的服务更改规则集和新的业务逻辑之前部署该服务,该服务会发送一组新的消息。我们不希望丢失在部署期间发送的消息,并在新服务退出时处理它们。 干杯。

  • 我已经能够弄清楚如何设置Azure ARM模板,该模板创建/管理Azure服务总线名称空间、主题和订阅,以接收所有消息。但是,ARM Tempates上的Microsoft文档仍然非常缺乏,我无法弄清楚如何在模板中为订阅定义一个SqlFilter,您可以使用.NET SDK管理该模板。 有人知道如何在ARM模板中向服务总线主题订阅添加Sql筛选器吗? 这里有一个ARM模板的链接,用于创建服务总线主

  • 有可能做到这一点吗?

  • 我想将一个小的JSON消息放入中。消息将具有附加到它的“ProviderID”属性,并且根据筛选规则,该消息将被筛选到特定于提供程序的上 但是,我似乎无法在上指定共享访问策略,以限制第三方提供商仅连接到他们自己的 我假设应该在订阅上设置以便将这些消息发送到另一个并在那里应用特定于提供程序的安全性,这样做是否正确。 或者有其他/更好的/推荐的方法来做这件事。

  • https://github.com/azure/azure-service-bus/tree/master/samples/dotnet/gettingstart/microsoft.azure.servicebus/topicsubscriptionwithruleoperationssample 现在我想添加一个筛选器/规则,这样只有通过筛选器中定义的特定条件的消息才应该给订阅。 例如,下面