如何创建主题并订阅多个独立订阅者,每个订阅者具有不同的订阅,而无需指定订阅名称。如果订阅者断开连接,则相应的订阅应自动删除。例如,可以使用用于日志记录目的的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/