publish-subscribe - Azure 服务总线主题,包含具有生成名称的独占自动删除订阅

标签 publish-subscribe azure-servicebus-topics

如何创建主题并订阅多个独立订阅者,每个订阅者具有不同的订阅,而无需指定订阅名称。如果订阅者断开连接,则相应的订阅应自动删除。例如,可以使用用于日志记录目的的rabbitmq服务器来实现这种情况。 https://www.rabbitmq.com/tutorials/tutorial-three-dotnet.html

In the .NET client, when we supply no parameters to queueDeclare() we create a non-durable, exclusive, autodelete queue with a generated name.

如果不可能,我如何包装.net客户端来实现这种情况?谢谢。

最佳答案

正如您在评论中提到的,当客户端连接(或应用程序启动)时,您可以使用唯一的 GUID 作为订阅名称来创建新订阅。并指定 SubscriptionDescription.AutoDeleteOnIdle property设置TimeSpan空闲间隔,超过该间隔后订阅将被自动删除。

var namespaceManager = NamespaceManager.CreateFromConnectionString(connectionString);

var subscriptionname = Guid.NewGuid().ToString();

if (!namespaceManager.SubscriptionExists(topicname, subscriptionname))
{
    SqlFilter updatedMessagesFilter =
        new SqlFilter("mypro = 'test'");

    namespaceManager.CreateSubscription(new SubscriptionDescription(topicname, subscriptionname) { AutoDeleteOnIdle = TimeSpan.FromMinutes(5) },
        updatedMessagesFilter);
} 

当客户端断开连接时,您可以手动删除订阅。

if (namespaceManager.SubscriptionExists(topicname, subscriptionname))
{
    namespaceManager.DeleteSubscription(topicname, subscriptionname);
}

注意:为了保证100%删除订阅,您可以在外部存储中保留有关客户端和订阅名称(唯一GUID)的信息,并且每次客户端连接/重新连接时,您可以检测是否外部存储中存在一条记录,表明当前客户端尚未删除该订阅(该客户端之前使用过的订阅),如果该记录存​​在,您可以在创建新订阅之前删除该订阅。

关于publish-subscribe - Azure 服务总线主题,包含具有生成名称的独占自动删除订阅,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45102834/

相关文章:

c# - 如何指定要与 MassTransit 一起使用的 Azure 服务总线主题

javascript - EmberJS Action - 当包装在 `actions` 中时从另一个 Action 调用一个 Action

azure - 如何在Azure服务总线中向主题的订阅添加过滤器

Azure 服务总线主题订阅并发

c# - 微软服务总线中的主题路径是什么?

Azure 服务总线和长处理消息

c++ - 回调中未更新的变量

php - ZMQ订阅者在长时间间隔后没有收到来自远程服务器的消息

asp.net - 如何在 Web 应用程序中使用 ServiceStack Redis 以利用发布/订阅范例

jms - Kafka 有持久订阅功能吗?