无法在 IBus.ConnectReceiveEndpoint 中设置 AutoDeleteOnIdle

Cannot set AutoDeleteOnIdle in IBus.ConnectReceiveEndpoint

在将 MassTransit 与 Azure 服务总线和 IBus.ConnectReceiveEndpoint 结合使用时,似乎没有办法使自动创建的订阅成为临时的或短期的。队列将是临时的,但不是订阅。队列将具有较短的 AutoDeleteOnIdle 值,但订阅将具有非常大的值。

如果您传入 TemporaryEndpointDefinition,MassTransit 将为队列提供 5 分钟的 AutoDeleteOnIdle,但订阅将设置为一年以上。相反,如果您尝试从 IBus.ConnectReceiveEndpoint 中配置 AutoDeleteOnIdle 值,那么您会收到一个错误,指出正在为已使用的 属性 设置一个值。

我在其他一些回答中看到,声称 Azure 服务总线订阅有一个错误,如果它们有转发规则集,它们不会自动删除。但是,我不确定它是否有机会,因为 AutoDeleteOnIdle 设置为如此高的值。

Azure 服务总线中有一个已知的 bug/limitation/defect/whatever,因为它与使用 AutoDeleteOnIdle 创建的主题订阅相关,该订阅转发到另一个消息传递实体。它们将永远不会设置为 AutoDeleteOnIdle,也永远不会设置为 AutoDeleteOnIdle。

对于这些临时端点,最好使用 ISubscriptionEndpointConnector 并创建对感兴趣主题的订阅并将其设置为 AutoDeleteOnIdle。这样,事情就会按预期进行,订阅将自动清理。

另一个选项是在配置接收端点时指定RemoveSubscriptions,当巴士停止时,MassTransit 将在成功关闭巴士后明确删除订阅。