C# 发送邮件有时需要很长时间
我正在使用Azure ServiceBus主题将消息从一个应用程序(WorkerRole)发送到另一个应用程序(WorkerRole)。尽快添加到消息主题队列非常重要,但是我发现C# 发送邮件有时需要很长时间,c#,azure,azureservicebus,C#,Azure,Azureservicebus,我正在使用Azure ServiceBus主题将消息从一个应用程序(WorkerRole)发送到另一个应用程序(WorkerRole)。尽快添加到消息主题队列非常重要,但是我发现TopicClient的Send()方法有时会在1秒到1min之间变化 我在Azure仪表板上的设置: 1名称空间 1主题 4订阅 我从两个不同的客户端发送到主题,但是目前我发送的消息量相当小,即每隔几秒钟我将向两个不同的订阅发送一条消息 我注意到,发送到订阅的消息在发送时间上似乎有所不同。下面是我的发送代码 pri
TopicClient
的Send()
方法有时会在1秒到1min之间变化
我在Azure仪表板上的设置:
- 1名称空间
- 1主题
- 4订阅
private void SendToSubscription(ReceivedQueue record, ServiceBusTopicFilter topicFilter)
{
var connectionString = CloudConfigurationManager.GetSetting("Microsoft.ServiceBus." + topicFilter.Topic);
var factory = MessagingFactory.CreateFromConnectionString(connectionString);
var topicClient = factory.CreateTopicClient(topicFilter.Topic);
try
{
// The Filter is so that different handlers of messages can receive only the ones they are desiring
var message = AsBrokeredMessage(record, topicFilter.Filter);
_traceMonitor.TraceInformation(record.Uid, "Sending packet to topic " + "[" + record.PacketId + "] [" + topicFilter.Filter + "]");
// NOTE: From my logging this part seems to take a while to action sometimes
topicClient.Send(message);
}
catch (MessagingException e)
{
// TODO: Handle transient errors properly to ensure we don't missing packet ??
Trace.TraceError("SendToSubscription.MessagingException :: " + e.Message);
}
catch (Exception ex)
{
Trace.TraceError("SendToSubscription.Exception :: " + ex);
}
}
消息处理是否会影响此发送?如果需要,我可以发布这些代码。多亏Gaurav Mantri为我指明了一个可能的方向,我找到了一种似乎更快的方法 似乎我在每个请求上都创建了一个新的MessageFactory。如图所示,在可能的情况下,对工厂进行再利用效率更高 因此,我最终做的是创建一个消息工厂池,这样通常我很少创建新的消息工厂连接
这意味着我现在看到即时消息发送到服务总线队列,唯一看到初始5秒延迟的时间是我第一次创建MessageFactory对象,然后第一次使用它。您的
var-topicClient=factory.CreateTopicClient(topicFilter.Topic)是否可能
需要很多时间吗?请看:(部分<代码>重用工厂和客户机<代码>)。我想这是可能的,谢谢,我将在那里进行更改。然而,我的日志记录就在发送之前,在发送之后,我看到了时间延迟,因为我在这个方法之外有另一个log语句来指示发送()所花费的时间。@GauravMantri在做了一个调整之后,现在看起来速度更快了。谢谢你的帮助,不客气。你最后做了什么调整?我很想知道。