string connectionString = CloudConfigurationManager.GetSetting("ServiceBus.ConnectionString");
// Note issue of how you secure this if necessary
var namespaceManager = NamespaceManager.CreateFromConnectionString(connectionString);
if (!namespaceManager.SubscriptionExists(TOPIC_NAME, SUBSCRIPTION_NAME))
{
//var messagesFilter = new SqlFilter("you can add a client filter for the subscription");
SubscriptionDescription sd = new SubscriptionDescription(TOPIC_NAME, SUBSCRIPTION_NAME)
{
// configure settings or accept the defaults
DefaultMessageTimeToLive = TimeSpan.FromDays(14),
EnableDeadLetteringOnMessageExpiration = true,
MaxDeliveryCount = 1000,
LockDuration = TimeSpan.FromMinutes(3)
};
namespaceManager.CreateSubscription(sd);
// or namespaceManager.CreateSubscription(sd, messagesFilter);
}
// subscription client for the new topic
_subscriptionClient = SubscriptionClient.CreateFromConnectionString(connectionString, TOPIC_NAME, SUBSCRIPTION_NAME, ReceiveMode.PeekLock);
1 回答
不一定是对此的完整答案,但是是的,可以使Service Bus以这种方式工作,从而使您保持在Azure服务配额限制内 .
客户可以创建自己的订阅
Rest api https://msdn.microsoft.com/en-us/library/azure/hh780748.aspx中有一个等价物
创建订阅后,客户端将能够从该点接收发送到主题的任何消息的自己的副本 .
您没有说有多少客户,但您需要保持服务总线服务限制https://azure.microsoft.com/en-us/documentation/articles/service-bus-quotas/
但是,您不包含有关您的应用程序的任何信息以及客户端的性质,并且可能有许多原因导致这不是一个明智的解决方案 . 包含
客户端需要知道订阅安全密钥 .
未协调的客户端必须创建唯一的订阅名称 .
客户端可以在完成订阅后删除订阅但您是否能够确保订阅?
根据配置,许多不活动的客户端可能会导致您的主题达到其配额限制并停止接受新邮件 .
......可能还有很多
如果客户不在您的控制之下,我会说这绝对不是正确的解决方案 .