使用Azure服务总线过滤消息时自定义RuleFilter



假设我在Azure服务总线中有一个topic,此主题接收我申请中注册的所有产品。因此,在一天结束时,消息体将这个结构体的序列化:

public struct Product
{
public int Id {get; set;}
public decimal Price {get: set;}
public DateTime LastOrder {get: set;} 
}

我的问题是我可以实现自己的RuleFilter,而不依赖于框架提供的SqlRuleFilterCorrelationRuleFilter吗?我想使用lambda和做类似的事情来订阅例如昂贵的产品:

var ruleOptions = new CreateRuleOptions("Default", new ConditionalRule(prod => prod.Price > 1000.00));

我试图创建自己的ConditionalRule,从RuleFilter类继承,但我担心这还不够。

我想实现的类的例子:

internal class ConditionalFilter<T> : RuleFilter
{
private readonly Func<bool, T> _rule;
public ConditionalFilter(Func<bool, T> rule)
{
_rule = rule ?? throw new ArgumentNullException(nameof(rule));
}
public override bool Equals(RuleFilter other)
{
throw new NotImplementedException();
}
public override bool Equals(object obj)
{
throw new NotImplementedException();
}
internal override RuleFilter Clone()
{
return new ConditionalFilter<T>(_rule);
}
}

我可以实现自己的RuleFilter,而不依赖于框架提供的SqlRuleFilterCorrelationRuleFilter

不,你不能。如果希望过滤消息,则必须使用

  1. 使用CorrelationRuleFilterSqlRuleFilter(很可能是后者)
  2. 将值从有效负载/正文提升到标题

最新更新