- •Лабораторные работы по специальному курсу
- •Лабораторная работа №1. Разработка централизованного алгоритма балансировки распределенного приложения
- •Описание централизованного алгоритма балансировки
- •Оценка загрузки
- •Инициализация балансировки загрузки
- •Принятие решений в процессе балансировки
- •Перемещение объектов
- •Использование .Net Remoting
- •Терминология .Net Remoting
- •Сериализуемый (ByValue - по значению)
- •Форматер
- •Принципы работы с каналами/форматерами
- •Создание объекта с возможностью удаленного доступа
- •Создание сервера
- •Создание клиента
- •Отчётность:
- •Лабораторная работа №2 Разработка и реализация централизованного алгоритма балансировки для вс с произвольной топологией
- •Централизованный алгоритм балансировки приведен в предыдущей лабораторной работе
- •Служба очередей сообщений
- •Настройка msmq
- •Создание очередей
- •Доступ к очередям
- •Удаление очередей
- •Посылка сообщения
- •Чтение сообщений очереди
- •Удаление сообщений из очереди
- •Рекомендуемые программные средства и литература
- •Отчётность:
Создание очередей
За создание новой очереди отвечает статический метод Create класса MessageQueue. В большинстве случаев очереди создаются системным администратором через консоль управления компьютером, однако иногда приложению требуется создать новые очереди на ходу. Метод Create является перегруженным, его параметр строкового типа указывает путь очереди, а параметр логического типа указывает, что очередь должна быть транзакционной. Для создания новой очереди используется фрагмент кода:
MessageQueue.Create(".\\Private$\\TestQ");
Символ "." используется как ссылки на локальную машину, если требуется, его можно заменить именем другого компьютера. Ключевое слово «Private$» означает, что создаваемая очередь является локальной, то есть другие машины сети не имеют доступа к ней. Для создания общедоступной очереди метод Create необходимо указать путь в формате «MachineName\QueueNaitie».
Для создания общедоступных очередей компьютер должен быть доменным сервером. Поэтому в данной лабораторной работе следует применять только локальные очереди.
Чтобы проверить, что очередь была создана корректно, на вкладке «Server Explorer» найдите очередь TestQ.
Доступ к очередям
После создания очереди необходим способ обращения к ней из исходного кода. Для этого предназначены несколько методов перечисления доступных очередей. Соответствующие статические методы класса MessageQueue приведены в таблице ниже.
Метод |
Описание |
GetPrivateQueuesByMachine |
Возвращает локальные очереди на компьютере |
GetPublicQueues |
Возвращает общедоступные очереди в сети |
GetPublicQueuesByCategory |
Возвращает общедоступные очереди в сети, принадлежащие заданной категории |
GetPublicQueuesByLabel |
Возвращает общедоступные очереди в сети, совпадающие с заданной меткой |
GetPublicQueuesByMachine |
Возвращает общедоступные очереди для заданного компьютера |
Представленный ниже программный код демонстрирует перечисление доступных локальных очередей.
// Получаем список локальных очередей данного компьютера
MessageQueue[] QueueList =
MessageQueue.GetPrivateQueuesByMachine(".");
// В диалоговом окне выводим пути доступных очередей
foreach (MessageQueue queueItem in QueueList)
{
MessageBox.Show(queueItem.Path);
}
Удаление очередей
Для удаления очередей используется статический метод Delete. Параметром метода является полное имя общедоступной или локальной очереди. В следующем примере удаляются локальная очередь с именем TestQ.
MessageQueue.Delete(".\\Private$\\TestQ");
Посылка сообщения
Для посылки сообщения очереди применяется метод Send, который является перегруженным и включает параметры Body, Label и Transaction. Ниже приведен пример кода, где выполняются отправка сообщения.
MessageQueue q = new MessageQueue(".\\Private$\\TestQ");
if (MessageQueue.Exists(q.Path))
{
q.Send("Test message","msg1");
q.Close();
}
Для проверки того, что очередь существует, применяется метод Exists. Желательно всегда производить подобную проверку, чтобы при выполнении программы не генерировалось прерывание, вызванное тем, что очередь не создана или находится в другом месте.
Если просмотреть очереди в консоли управления компьютером, в очереди TestQ можно найти сообщение сметкой msg1. При двойном щелчке на сообщении или выборе команды «Свойства» в контекстном меню по правой кнопке мыши можно просмотреть свойства и текст сообщения.