Сохраняющиеся подписки NServiceBus в образце Pub/Sub

Я хочу выяснить, как настроить образец Pub/Sub из NServiceBus для работы в случае неисправности издателя. Когда я запускаю образцы и случайно закрываю подписчиков, если я перезапускаю, все работает нормально. Однако, если я убью издателя, а подписки продолжат работать, если я перезапущу издателя, то он, похоже, не знает, что у него есть подписчики, и не публикует никаких сообщений.

Я добавил запись конфигурации ‹MsmqSubscriptionStorageConfig Queue="subscriptions"/›, но, похоже, она не работает... Я что-то упустил. Я гуглил о MsmqSubscriptionStorageConfig и DbSubscriptionStorageConfig, но не нашел решения.

Может ли кто-нибудь указать мне в правильном направлении?


person Community    schedule 06.02.2010    source источник


Ответы (2)


Я обнаружил, что требуется несколько дополнительных шагов, чтобы заставить это работать с образцом Pub/Sub в .Net 4.0, используя систему хранения подписки SQLite.

Сочетая предыдущие предложения с новыми, вот необходимые изменения, все из которых относятся к проекту MyPublisher.


  • Добавьте ссылку на System.Data.SQLite. Обязательно выберите версию, соответствующую желаемой архитектуре (x86/x64). Эти элементы можно найти в папке «двоичные файлы».

  • В файле App.config добавьте следующий элемент в качестве нового элемента configSection:

    <section name="DBSubscriptionStorageConfig" 
    type="NServiceBus.Config.DBSubscriptionStorageConfig, NServiceBus.Core" />
    
  • В файле App.config добавьте следующее в качестве нового элемента конфигурации:

    <DBSubscriptionStorageConfig>
        <NHibernateProperties>
            <add Key="connection.provider" 
                Value="NHibernate.Connection.DriverConnectionProvider"/>
            <add Key="connection.driver_class"
                Value="NHibernate.Driver.SQLite20Driver"/>
            <add Key="connection.connection_string"
                Value="Data Source=.\Subscriptions.sqlite;Version=3;New=True;"/>
            <add Key="dialect"
                Value="NHibernate.Dialect.SQLiteDialect"/>
        </NHibernateProperties>
    </DBSubscriptionStorageConfig>
    
  • Добавьте этот фрагмент XML в раздел конфигурации файла NServiceBus.Host.exe.config:

    <startup useLegacyV2RuntimeActivationPolicy="true">
        <supportedRuntime version="v4.0"/>
    </startup>
    
person Kevin Pullin    schedule 02.04.2011

Вам нужно изменить профиль издателя на производство. См. http://docs.particular.net/nservicebus/hosting/nservicebus-host/profiles

Для отладки таким образом перейдите к свойствам проекта издателя, на вкладку «Отладка» и введите NServiceBus.Production в аргументах командной строки раздела «Параметры запуска».

person Udi Dahan    schedule 06.02.2010
comment
Я сделал это, добавил хранилище подписки БД, найденное в образце OrderService, но я застрял с исключением, что база данных не была настроена с помощью метода базы данных. В .config я использовал sqlite, я считаю, что файл sqlite не создан. Как настроить один? - person ; 06.02.2010
comment
Спасибо. Я нашел решение. Я пропустил свойство UpdateSchema узла DBSubscriptionStorage. Это полный тег для работы: ‹DBSubscriptionStorageConfig UpdateSchema=true› ‹NHibernateProperties› ‹add Key=connection.provider Value=NHibernate.Connection.DriverConnectionProvider/› ‹add Key=connection.driver_class Value=NHibernate.Driver.SQLite20Driver/ › ‹add Key=connection.connection_string Value=Data Source=.\Subscriptions.sqlite;Version=3;New=True;/› ‹add Key=dialect Value=NHibernate.Dialec... - person ; 06.02.2010