ПКРПСиБД LAB7 Бочаров И.А. (Лабораторная работа 7)
Описание файла
Файл "ПКРПСиБД LAB7 Бочаров И.А." внутри архива находится в папке "Лабораторная работа 7". Документ из архива "Лабораторная работа 7", который расположен в категории "". Всё это находится в предмете "распределённые ис и базы данных" из 9 семестр (1 семестр магистратуры), которые можно найти в файловом архиве НИУ «МЭИ» . Не смотря на прямую связь этого архива с НИУ «МЭИ» , его также можно найти и в других разделах. Архив можно найти в разделе "лабораторные работы", в предмете "распределённые ис и базы данных" в общих файлах.
Онлайн просмотр документа "ПКРПСиБД LAB7 Бочаров И.А."
Текст из документа "ПКРПСиБД LAB7 Бочаров И.А."
Национальный исследовательский институт
Московский Энергетический Институт (Технический Университет)
Институт автоматики и вычислительной техники
Кафедра Прикладной математики
Лабораторная работа №7
по дисциплине:
Проектирование крупных распределенных программных систем и баз данных
тема: «Разработка приложения с событийно-управляемой архитектурой с применением NServiceBus »
Выполнил:
Бочаров Иван Андреевич
Проверил:
к.т.н., доц. Куриленко Иван Евгеньевич
Москва
2012 г.
NServiceBus
NServiceBus является популярным фреймворком для интеграции сервисов и разработки распределенных приложений.
Автор – архитектор и исследователь Udi Dahan.
В качестве основного транспорта используется MSMQ (Microsoft Message Queue), который обеспечивает транзакционность, надежную пересылку и дисковое хранение сообщений.
Шина NServiceBus является виртуальной сущностью, полученной в результате взаимодействия сервисов вместе. Это означает, что в каждом процессе присутствует своя сущность шина, обеспечивающая отправку и получение сообщений.
Рис. 1 Схематическое изображение шины
Шаблоны обмена сообщениями
-
Однонаправленное сообщение (One-way)
-
Запрос/ответ (RPC)
-
Дуплексный обмен (Full-duplex)
-
Издатель/подписчик (Pub/Sub)
Исходный код
Message.cs
using System;
namespace MyMessages
{
[Serializable]
public class EventMessage : IMyEvent
{
public Guid EventId { get; set; }
public DateTime? Time { get; set; }
public string Text { get; set; }
}
public interface IMyEvent
{
Guid EventId { get; set; }
DateTime? Time { get; set; }
string Text { get; set; }
}
}
Subscriber1.cs
using System;
using log4net;
using MyMessages;
using NServiceBus;
namespace Subscriber1
{
public class EventMessageHandler : IHandleMessages
{
public void Handle(EventMessage message)
{
Console.WriteLine(string.Format("Получено сообщение с идентификатором {0}.", message.EventId));
Console.WriteLine(string.Format("Тело сообщения: {0}.", message.Text));
Console.WriteLine(string.Format("Время сообщения: {0}.", message.Time));
Console.WriteLine("==========================================================================");
}
}
}
MyPublisher.cs
using System;
using MyMessages;
using NServiceBus;
namespace MyPublisher
{
public class ServerEndpoint : IWantToRunAtStartup
{
public IBus Bus { get; set; }
public void Run()
{
Console.WriteLine("Для выхода введите EXIT");
string key;
while ((key=Console.ReadLine()) != "EXIT")
{
var eventMessage = new EventMessage();
eventMessage.EventId = Guid.NewGuid();
eventMessage.Time = DateTime.Now;
eventMessage.Text = key;
Bus.Publish(eventMessage);
Console.WriteLine("Опубликовано сообщение с идентификатором {0}.", eventMessage.EventId);
Console.WriteLine("==========================================================================");
}
}
public void Stop()
{
Console.WriteLine("Рассылка сообщений прекращена");
}
}
}
App.config для подписчиков
App.config для публикатора
publicKeyToken="af08829b84f0328e" culture="neutral" /> newVersion="2.0.0.0"/> EndpointConfig.cs using NServiceBus; namespace Subscriber1 { class EndpointConfig : IConfigureThisEndpoint, AsA_Server,IWantCustomInitialization { public void Init() { Configure.With() .DefiningEventsAs(t => t.Namespace != null && t.Namespace.StartsWith("MyMessages"));} } }Разработанное приложение