У нас есть постоянная проблема с очень медленной записью сообщений в MSMQ. Наша очередь находится на Windows Server 2008 SP2. Очередь - это общедоступная очередь с адресом «servername \ queuename».
Код для отправки сообщения в очередь:
MessageQueue queue = new MessageQueue(Settings.Default.DefaultDestinationQueue);
queue.Formatter = new BinaryMessageFormatter();
queue.Send(message);
Сообщение, которое мы пытаемся отправить, представляет собой просто «PublishMessage», а именно:
[Serializable]
public class PublishMessage {
public int EntryId {get; set; }
}
Мы видим, что сообщения действительно попадают в очередь, но ведение журнала до и после показывает, что для каждого сообщения обычно требуется более 1 минуты.
В настоящее время мы не видим ничего плохого в нашей конфигурации очереди, но не являемся экспертами по очередям - это первое дополнение к этому приложению. У кого-нибудь есть идеи?
Редактировать: На нашем сервере работает SP 2 (не SP1, о котором я говорил изначально). Запуск экземпляра непосредственно на машине, на которой размещена очередь, выполняется быстро, а любой другой - нет.
Примечание: Я перекрестил это на https://stackoverflow.com/questions/6083070/msmq-write-taking-1-minute
Наша проблема оказалась проблемой инфраструктуры с серверами, не прошедшими аутентификацию должным образом. Наш системный администратор, наконец, исправил ситуацию, перенастроив сервер, на котором размещена очередь.
Не могли бы вы прояснить «ведение журнала до и после показа, что обычно это занимает более 1 минуты для каждого сообщения». Вы ведете журнал непосредственно до и после send ()? Или между двумя строками журнала есть еще код? Send () передает сообщение локальному администратору очередей для доставки удаленному администратору очередей. Любая регистрация будет просто показывать, когда сообщение попало в исходящую очередь, а не когда оно было доставлено.
Я бы полагался на монитор производительности, чтобы точно показывать, когда сообщения покидают одну машину и приходят на другую.
Большинство задержек, которые я видел:
Посмотрите на исходящую очередь, когда вы отправляете сообщение, чтобы узнать, ожидает ли соединение.
Последовательна ли задержка?
Ура
Джон Бреокелл