假设我在Azure服务总线中有一个topic
,此主题接收我申请中注册的所有产品。因此,在一天结束时,消息体将这个结构体的序列化:
public struct Product
{
public int Id {get; set;}
public decimal Price {get: set;}
public DateTime LastOrder {get: set;}
}
我的问题是我可以实现自己的RuleFilter
,而不依赖于框架提供的SqlRuleFilter
和CorrelationRuleFilter
吗?我想使用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
,而不依赖于框架提供的SqlRuleFilter
和CorrelationRuleFilter
不,你不能。如果希望过滤消息,则必须使用
- 使用
CorrelationRuleFilter
或SqlRuleFilter
(很可能是后者) - 将值从有效负载/正文提升到标题