Лабораторная работа 7 (ПКРПСиБД 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



  1. Скачайте и установите менеджер пакетов Nuget по ссылке

http://visualstudiogallery.msdn.microsoft.com/27077b70-9dad-4c64-adcf-c7cf6bc9970c



  1. Разрешите Nuget скачивать недостающие пакеты
    Инструкция http://docs.nuget.org/docs/release-notes/nuget-1.8



  1. Скачайте архив с NServiceBus по ссылке http://www.nservicebus.com/downloadnow.aspx?download=true



  1. Если Вы используете Windows 7, разблокируйте архив
    (клик правой кнопкой мыши по архиву >> Свойства >> Разблокировать)





  1. Распакуйте архив в директорию на вашем локальном жестком диске, например, в D:\NServiceBus (убедитесь, что длина пути не превышает 200 символов).



  1. Запустите файл D:\NServiceBus\RunMeFirst.bat и следуйте инструкциям установщика.



  1. При необходимости, перезапустите 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<EventMessage>

{

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)

xml version="1.0" encoding="utf-8" ?>

<configuration>

<configSections>

<section name="Logging" type="NServiceBus.Config.Logging, NServiceBus.Core" />

<section name="UnicastBusConfig" type="NServiceBus.Config.UnicastBusConfig, NServiceBus.Core" />

configSections>


<Logging Threshold="OFF" />

<UnicastBusConfig>

<MessageEndpointMappings>

<add Messages="MyMessages" Endpoint="MyPublisher" />

MessageEndpointMappings>

UnicastBusConfig>


configuration>




Издатель



Подписчик 1



Подписчик 2

Литература



  1. Документация NServiceBus.

  2. Обзор возможностей NServiceBus. Евгений Шапиро. Доклад с конференции Microsoft TechDays 2010.

Москва, 2012






Чтобы не видеть здесь видео-рекламу достаточно стать зарегистрированным пользователем.
Чтобы не видеть никакую рекламу на сайте, нужно стать VIP-пользователем.
Это можно сделать совершенно бесплатно. Читайте подробности тут.