我已经尝试过在这个问题上做作业,但是没有我能做的搜索让我更接近答案.最受欢迎的是在Azure Service Bus上检测并删除孤立队列,主题或订阅.
我的情景:
我有多个服务正在运行(标准win服务).在启动时,这些进程开始订阅Azure Service Bus中的给定主题.我们将主题称为"消息".
当服务关闭时,它会以一种很好的方式取消订阅.
但有时会发生一些事情并且服务崩溃,导致取消订阅失败,然后订阅就会挂起.
我的问题:
1)从我所看到的情况来看,每个死主题订阅都会在邮件发送到该主题时计算.即使没有人会去接它.事实还是虚构?
2)无论如何都要删除一段时间未检查过的订阅,例如过去24小时?最好是Power Shell脚本吗?
我直接向微软提出这个问题,但尚未收到任何答复.当然,我不能成为第一个体验这一点的人.如果我收到任何第三方信息,我也会更新此信息.
谢谢
约翰
我们在Windows Azure上以Web角色托管了一个API,其中有2个实例接收请求,验证它们然后将它们添加到Azure Service Bus队列.
最近我们开始加载测试,发现我们当前的代码抛出以下异常:
无法向命令队列添加命令异常:Microsoft.ServiceBus.Messaging.QuotaExceededException:已达到或超过队列的最大连接数.活动连接数:100,允许的最大连接数:100.
假设我们维护了一个类的实例,下面的客户端代码是否会保持单个连接打开?我试图确定问题是与ServiceBusClient代码或我们的依赖注册是否为每个请求初始化一个新客户端.
public class ServiceBusClient : IDisposable
{
#region Constants and Fields
protected readonly NamespaceManager NamespaceManager;
private const int DEFAULT_LOCK_DURATION_IN_SECONDS = 300; // 5 minutes
private const string SERVICE_BUS_CONNECTION_STRING_KEY
= "service.bus.connection.string";
private readonly IMessageBodySerializer _messageBodySerializer;
private readonly MessagingFactory _messagingFactory;
private readonly QueueClient _queueClient;
private readonly string _queueName;
private readonly ISettingsManager _settingsManager;
#endregion
#region Constructors and Destructors
public ServiceBusClient(
ISettingsManager settingsManager,
IMessageBodySerializer messageBodySerializer, s
tring queueName)
{
_settingsManager = settingsManager;
_messageBodySerializer = messageBodySerializer;
var connectionString = …Run Code Online (Sandbox Code Playgroud) 无论一个主题上在Azure Service Bus和相关的认购暴露的DefaultMessageTimeToLive财产; 初始化如下:
if (!NamespaceManager.TopicExists(TopicName))
{
NamespaceManager.CreateTopic(
new TopicDescription(TopicName)
{
MaxSizeInMegabytes = 5120,
DefaultMessageTimeToLive = TimeSpan.FromDays(14)
});
}
if (!NamespaceManager.SubscriptionExists(TopicName, SubscriptionName))
{
NamespaceManager.CreateSubscription(
new SubscriptionDescription(TopicName, SubscriptionName)
{
LockDuration = TimeSpan.FromMinutes(5),
DefaultMessageTimeToLive = TimeSpan.FromDays(7),
EnableDeadLetteringOnMessageExpiration = true
});
}
Run Code Online (Sandbox Code Playgroud)
两者有什么区别,有两个TTL设置的目的是什么?此外; 如果消息在主题上过期会发生什么?
我正在关注本教程:
它提到我应该从ServiceBus的属性中获取IssuerName和IssuerKey.使用VS2012 Server Explorer检查我的ServiceBus时,没有名为IssuerName和IssuerKey的属性.当我使用在线Azure管理控制台并单击连接信息时,我只获得一个不是预期的IssuerName和IssuerKey的连接字符串.
这些价值在哪里?我正在免费试用,这有关系吗?
这就是我所看到的.
我有一个webjob应用程序来处理运行良好的ServiceBus队列,使用以下方法:
public static void ProcessQueueMessage([ServiceBusTrigger("myQueueName")] BrokeredMessage message, TextWriter log)
Run Code Online (Sandbox Code Playgroud)
但是,我希望能够在不重新编译的情况下更改队列名称,例如根据配置appsetting,可以完成吗?
我正在处理EventHub的高吞吐量应用程序.根据文档,为了从单个发送方实现非常高的吞吐量,需要客户端批处理(不超过每个事件256 KB的限制).
使用Service Bus代理消息传递提高性能的最佳实践建议客户端批处理以实现性能改进.它描述了客户端批处理可用于队列或主题客户端,这使得能够在一段时间内延迟发送消息,然后它在一个批处理中传输消息.
EventHub客户端中是否提供客户端批处理?
我正在设置主题/订阅服务,需要帮助我的SQLFilter语法,以便我可以访问BrokeredMessage属性,特别是To属性.SQL筛选器访问邮件系统属性的正确语法是什么?
我有一个使用本教程的工作示例,我可以根据需要发送和接收我的主题/订阅:https://azure.microsoft.com/en-us/documentation/articles/service-bus-queues-topics-subscriptions/
但是,现在我想根据BrokeredMessage的To属性为每个订阅设置SQL过滤器.我所遵循的教程提到可以"创建订阅时,您可以提供对消息属性进行操作的过滤器表达式,包括系统属性(例如,Label)和自定义应用程序属性(例如,StoreName) .)"
如果我设置自定义属性,例如StoreName,如下所示:
message.Properties.Add("StoreName", "TestMe");
Run Code Online (Sandbox Code Playgroud)
并使用SQL过滤器设置订阅,如下所示:
namespaceManager.CreateSubscription("MyNSTestTopic", "TestSubscription", new SqlFilter("StoreName = 'TestMe'"));
Run Code Online (Sandbox Code Playgroud)
订阅按预期过滤.但是,如果我尝试使用文章中描述的BrokeredMessage对象To属性(或标签),我一直无法使其工作.我尝试了以下SQL过滤器没有运气.访问消息的系统属性的正确语法是什么?
BrokeredMessage message = new BrokeredMessage();
message.To = "TestMe";
namespaceManager.CreateSubscription("MyNSTestTopic", "TestSubscription", new SqlFilter("To = 'TestMe'"));
namespaceManager.CreateSubscription("MyNSTestTopic", "TestSubscription", new SqlFilter("Message.To= 'TestMe'"));
namespaceManager.CreateSubscription("MyNSTestTopic", "TestSubscription", new SqlFilter("MessageTo= 'TestMe'"));
namespaceManager.CreateSubscription("MyNSTestTopic", "TestSubscription", new SqlFilter("messageto= 'TestMe'"));Run Code Online (Sandbox Code Playgroud)
如何通过Azure服务总线从Xamarin Forms PCL完成代码消息传递...是否有SDK,库或插件?如果有办法手工推送代理消息,我想可以使用HttpClient和REST API完成...
我们使用Azure SDK将消息发布到Service Bus.在Web API调用中,我们为每个传入请求重复执行这些任务
MessagingFactory factory = MessagingFactory.CreateFromConnectionString(conStr);
factory.RetryPolicy = new RetryExponential(TimeSpan.FromSeconds(1), TimeSpan.FromSeconds(2), 3);
var namespaceManager = NamespaceManager.CreateFromConnectionString(conStr);
TopicClient topicClient = factory.CreateTopicClient(topicName);
Run Code Online (Sandbox Code Playgroud)
topicClient可以转换为Singleton并在多个线程中重用吗?
multithreading azure azureservicebus azure-servicebus-topics
我有以下代码将消息发送到总线:
var queueClient = new QueueClient(ServiceBusConnectionString, QueueName);
var message = new Message(poco.SerializeToBytes());
await queueClient.SendAsync(message);
Run Code Online (Sandbox Code Playgroud)
但他们似乎直接进入了死亡信件消息计数:
我还创建了一个Azure函数,它将选择消息:
[FunctionName("ServiceBusFunction")]
public static void Run([ServiceBusTrigger("schedule", AccessRights.Listen, Connection = "ServiceBusConnection")]byte[] myQueueItem, TraceWriter log)
{
log.Info($"C# ServiceBus queue trigger function processed message: {myQueueItem}");
}
Run Code Online (Sandbox Code Playgroud)
当我关闭该功能时,在创建此功能之前,消息进入ACTIVE MESSAGE COUNT.我已尝试在本地运行该函数,但该函数未被命中.我觉得自己错过了从函数中获取总线上的消息方面的基本信息吗?
azure azureservicebus azure-servicebus-queues azure-functions