- •Лабораторные работы по специальному курсу
- •Лабораторная работа №1. Разработка централизованного алгоритма балансировки распределенного приложения
- •Описание централизованного алгоритма балансировки
- •Оценка загрузки
- •Инициализация балансировки загрузки
- •Принятие решений в процессе балансировки
- •Перемещение объектов
- •Использование .Net Remoting
- •Терминология .Net Remoting
- •Сериализуемый (ByValue - по значению)
- •Форматер
- •Принципы работы с каналами/форматерами
- •Создание объекта с возможностью удаленного доступа
- •Создание сервера
- •Создание клиента
- •Отчётность:
- •Лабораторная работа №2 Разработка и реализация централизованного алгоритма балансировки для вс с произвольной топологией
- •Централизованный алгоритм балансировки приведен в предыдущей лабораторной работе
- •Служба очередей сообщений
- •Настройка msmq
- •Создание очередей
- •Доступ к очередям
- •Удаление очередей
- •Посылка сообщения
- •Чтение сообщений очереди
- •Удаление сообщений из очереди
- •Рекомендуемые программные средства и литература
- •Отчётность:
Чтение сообщений очереди
Для чтения сообщения из очереди используется метод Peek или Receive. Метод Peek читает первое сообщение в очереди. Он используется для проверки наличия сообщений в очереди и проверки ее свойств. При этом сообщение не удаляется. Если вызвать метод несколько раз, он будет возвращать одно и то же сообщение, пока в очереди не появится сообщение более высокого приоритета. Метод Receive читает сообщение и удаляет его из очереди.
Применение метода Peek демонстрируется в следующем фрагменте кода.
// Подключение к очереди
MessageQueue q = new MessageQueue(".\\Private$\\TestQ");
// Установка форматера тела сообщения.
q.Formatter = new XmlMessageFormatter(new Type[]
{typeof(System.String)});
try
{
// Просмотр и форматирование сообщения.
System.Messaging.Message myMessage = q.Peek();
String str = (String)myMessage.Body;
// Вывод тела сообщения на экран.
MessageBox.Show(str);
}
catch (MessageQueueException)
{
// Обработка исключений, связанных с очередями.
}
// Обработка исключений, связанных с сериализацией.
catch (InvalidOperationException ex)
{
Console.WriteLine(ex.Message);
}
Применение метода Receive демонстрируется в следующем фрагменте кода.
MessageQueue q = new MessageQueue(".\\Private$\\TestQ");
q.Formatter = new XmlMessageFormatter(new Type[] { typeof(System.String) });
try
{
System.Messaging.Message myMessage = q.Receive();
String str = (String)myMessage.Body;
MessageBox.Show(str);
}
catch (MessageQueueException)
{
}
catch (InvalidOperationException ex)
{
Console.WriteLine(ex.Message);
}
Удаление сообщений из очереди
Для удаления сообщений используется метод Purge объекта MessageQueue. Следующий фрагмент кода удаляет все сообщения из очереди TestQ.
MessageQueue q = new MessageQueue(".\\Private$\\TestQ");
q.Purge();
В реальной очереди вам, скорее всего, не придется удалять сообщения. Метод Purge применяется, в основном, для журнальных очередей. Если свойство UseJournalQueue установлено при создании очереди значением True, каждое сообщение дублируется в журнальной очереди. Для удаления журнальной копии очереди TestQ применяется следующий фрагмент кода:
MessageQueue q = new MessageQueue(".\\Private$\\TestQ\\Journal$");
q.Purge();
Рекомендуемые программные средства и литература
Для выполнения данной лабораторной работы следует использовать языки C# или Visual Basic .NET.
Рекомендуемая литература по созданию многопоточных приложений на VB .NET:
Петрусос Е. Эффективная работа: Visual Basic .NET.-СПб.: Питер, 2002. 928 с.
Корнелл Г., Моррисон Дж. Программирование на VB. NET: учебный курс. СПб.: Питер, 2002. 400 с.
Эппламан Д. Переход на VB .NET: стратегии, концепции, код. CПб.: Питер, 2002. 464 c.
Рекомендуемая литература по созданию многопоточных приложений на C#:
Троелсен Э. С# и платформа .NET. СПб.: Питер, 2003. 800 с.
Секунов Н.Ю. Разработка приложений на С++ и С#. СПб.: Питер, 2003. 608 с.
Шилдт Г. С#. СПб.: Питер, 2003. 512 с.