ПКРПСиБД LAB7 Захаров А.Е. (Лабораторная работа 7)
Описание файла
Файл "ПКРПСиБД LAB7 Захаров А.Е." внутри архива находится в папке "Лабораторная работа 7". Документ из архива "Лабораторная работа 7", который расположен в категории "". Всё это находится в предмете "распределённые ис и базы данных" из 9 семестр (1 семестр магистратуры), которые можно найти в файловом архиве НИУ «МЭИ» . Не смотря на прямую связь этого архива с НИУ «МЭИ» , его также можно найти и в других разделах. Архив можно найти в разделе "лабораторные работы", в предмете "распределённые ис и базы данных" в общих файлах.
Онлайн просмотр документа "ПКРПСиБД LAB7 Захаров А.Е."
Текст из документа "ПКРПСиБД LAB7 Захаров А.Е."
Национальный Исследовательский Университет
МОСКОВСКИЙ ЭНЕРГЕТИЧЕСКИЙ ИНСТИТУТ
Институт автоматики и вычислительной техники
Кафедра прикладной математики
Лабораторная работа № 7
Разработка приложения
с событийно-управляемой архитектурой
с применением NServiceBus
Курс «Проектирование крупных распределенных программных систем и баз данных»
Выполнил
студент группы А-13-08
Захаров Антон
Преподаватель
к.т.н., доц. Куриленко Иван Евгеньевич
Цель работы
Научиться разрабатывать событийно-управляемые приложения на примере использования NServiceBus.
Теоретическое введение
NServiceBus – популярный фреймворк для интеграции сервисов и разработки распределённых приложений (автор Udi Dahan), использующий для транспорта сообщений службы очереди сообщений Microsoft (Microsoft Message Queuing Services, MSMQ), которые обеспечивают транзакционность и надёжность пересылки сообщений.
Шина NServiceBus является виртуальной сущностью, полученной в результате взаимодействия сервисов вместе. Это означает, что в каждом процессе присутствует своя сущность шина, обеспечивающая отправку и получение сообщений.
NServiceBus поддерживает несколько шаблонов обмена сообщениями:
-
Однонаправленное сообщение (One-way)
-
Запрос/ответ (RPC)
-
Дуплексный обмен (Full-duplex)
-
Издатель/подписчик (Pub/Sub)
Установка NServiceBus
-
Скачайте и установите менеджер пакетов Nuget по ссылке
http://visualstudiogallery.msdn.microsoft.com/27077b70-9dad-4c64-adcf-c7cf6bc9970c
-
Разрешите Nuget скачивать недостающие пакеты
Инструкция http://docs.nuget.org/docs/release-notes/nuget-1.8
-
Скачайте архив с NServiceBus по ссылке http://www.nservicebus.com/downloadnow.aspx?download=true
-
Если Вы используете Windows 7, разблокируйте архив
(клик правой кнопкой мыши по архиву >> Свойства >> Разблокировать)
-
Распакуйте архив в директорию на вашем локальном жестком диске, например, в D:\NServiceBus (убедитесь, что длина пути не превышает 200 символов).
-
Запустите файл D:\NServiceBus\RunMeFirst.bat и следуйте инструкциям установщика.
-
При необходимости, перезапустите Visual Studio.
Разработка приложения с использование NServiceBus
Используя NServiceBus, разработаем приложение, реализующее шаблон «Издатель/подписчик», т. к. возможности по реализации данного шаблона являются сильной стороной NServiceBus.
Приложение будет включать три параллельно запускаемых процесса: Publisher (издатель), Subscriber1 и Subscriber2 (два подписчика).
Сообщение (Message.cs)
namespace MyMessages
{
public class EventMessage : IMyEvent
{
public Guid Id { get; set; }
}
public interface IMyEvent
{
Guid Id { get; set; }
}
}
Издатель (Publisher.cs)
using System;
using Message;
using NServiceBus;
namespace Publisher
{
public class ServerEndpoint : IWantToRunAtStartup
{
public IBus Bus { get; set; }
public void Run()
{
Console.WriteLine("Нажмите 'Enter', чтобы опубликовать сообщение.");
while (Console.ReadLine() != "stop")
{
// Создание сообщения с уникальным идентификатором
EventMessage message = new EventMessage();
message.Id = Guid.NewGuid();
// Публикация сообщения
Bus.Publish(message);
Console.WriteLine("Опубликовано сообщение с id = '{0}'.", message.Id);
}
// Остановка работы сервера
Stop();
}
public void Stop()
{
Console.WriteLine("Сервер остановлен.");
}
}
}
Конфигурация конечной точки издателя (EndpointConfig.cs)
using NServiceBus;
namespace Publisher
{
class EndpointConfig : IConfigureThisEndpoint, AsA_Publisher, IWantCustomInitialization
{
public void Init()
{
// Использование Spring фреймворка в качестве контейнера
// Переопределение стандартных сообщений NServiceBus
Configure.With().SpringFrameworkBuilder()
.DefiningEventsAs(t => t.Namespace != null && t.Namespace.StartsWith("Message"));
}
}
}
Подписчик (Subscriber.cs)
using System;
using Message;
using NServiceBus;
namespace Subscriber1
{
public class EventMessageHandler : IHandleMessages
{
public void Handle(EventMessage message)
{
Console.WriteLine("Подписчик 1 получил сообщение с id = '{0}'.", message.Id);
Console.WriteLine();
}
}
}
Конфигурации конечных точек подписчиков (EndpointConfig.cs)
using NServiceBus;
namespace Subscriber1
{
class EndpointConfig : IConfigureThisEndpoint, AsA_Server, IWantCustomInitialization
{
public void Init()
{
// Переопределение стандартных сообщений NServiceBus
Configure.With()
.DefiningEventsAs(t => t.Namespace != null && t.Namespace.StartsWith("Message"));
}
}
}
Конфигурации подписчиков (App.config)
Издатель
Подписчик 1
Подписчик 2
Литература
-
Документация NServiceBus.
-
Обзор возможностей NServiceBus. Евгений Шапиро. Доклад с конференции Microsoft TechDays 2010.
Москва, 2012