.net core 无法使用Microsoft.Azure.ServiceBus库在Azure服务总线订阅筛选器上设置基于时间跨度的参数
使用较旧的Windows.Azure.ServiceBus库,我可以设置一个以时间跨度作为参数的SqlFilter,但是当我尝试使用Microsoft.Azure.ServiceBus库进行相同操作时,它失败,出现以下错误: 对象的类型不受支持:TimeSpan。只有以下类型是可用的 通过HTTP支持:string、int、long、bool、double、DateTime 我想做的是: 我想订阅两个我的主题高优先级,普通优先级 消息具有名为StartDate的用户属性.net core 无法使用Microsoft.Azure.ServiceBus库在Azure服务总线订阅筛选器上设置基于时间跨度的参数,.net-core,azureservicebus,.net-standard,azure-servicebus-subscriptions,.net Core,Azureservicebus,.net Standard,Azure Servicebus Subscriptions,使用较旧的Windows.Azure.ServiceBus库,我可以设置一个以时间跨度作为参数的SqlFilter,但是当我尝试使用Microsoft.Azure.ServiceBus库进行相同操作时,它失败,出现以下错误: 对象的类型不受支持:TimeSpan。只有以下类型是可用的 通过HTTP支持:string、int、long、bool、double、DateTime 我想做的是: 我想订阅两个我的主题高优先级,普通优先级 消息具有名为StartDate的用户属性 如果StartDate库
如果StartDate库抛出异常,指出TimeSpan不是受支持的类型,那么它几乎就是您所拥有的类型。请注意,.NET标准客户端有两种实现,管理客户端和一些通过实体客户端(如订阅客户端)执行的操作。后者使用AMQP实现。ManagementClient完全基于HTTP。虽然使用AMQP实现是理想的,但它是不完整的。我建议依赖管理客户。这可能就是为什么使用订阅客户端修改规则会引发异常的原因
关于更好的方法-你的想法听起来不错。只要它不是新客户端不接受的类型。此外,如果您想知道TimeSpan不再受支持的原因,可以在上向库团队提出问题。为SDK团队创建了一个问题:
SqlFilter highMessagesFilter =
new SqlFilter("(StartDate-sys.EnqueuedTimeUtc) <= @TimeSpanImmediateWindow");
highMessagesFilter.Parameters.Add("@TimeSpanImmediateWindow", TimeSpan.FromDays(1));
var subscription = SubscriptionClient.CreateFromConnectionString(connectionString,topicName, subName1);
subscription.RemoveRule(RuleDescription.DefaultRuleName);
subscription.AddRule(new RuleDescription()
{
Name = RuleDescription.DefaultRuleName,
Filter = highMessagesFilter,
Action = new SqlRuleAction("set priorityCalc = (StartDate-sys.EnqueuedTimeUtc)")
});
var filter = new SqlFilter("(StartDate-sys.EnqueuedTimeUtc) <= @TimeSpanHoursImmediateWindow");
filter.Parameters.Add("@TimeSpanHoursImmediateWindow",TimeSpan.FromDays(1));
var ruleDescription = new RuleDescription
{
Filter = filter,
Action = new SqlRuleAction(@"
SET HighPriority = TRUE;
SET Window = StartDate - sys.EnqueuedTimeUtc
"),
Name = RuleDescription.DefaultRuleName,
};
await managementClient.UpdateRuleAsync(topicPath,subscriptionName,ruleDescription);
var subClient = new SubscriptionClient(connectionString, topicPath, subscriptionName);
await subClient.RemoveRuleAsync(RuleDescription.DefaultRuleName);
await subClient.AddRuleAsync(ruleDescription);