Каковы ограничения транспорта сервера Sql в NServiceBus?

Я пытаюсь заставить VideoStore.NHibernate образец NServiceBus (из Github) работать с использованием SqlServerTransport, а не MSMQ (мы не хотим полагаться ни на MSMQ, ни на RavenDb).

Я переключил этот образец на использование SqlServerTransport, а не MsmqTransport, выполнив следующие действия:

  • Добавление соответствующего пакета NuGet для NserviceBus.SqlServer
  • Добавление соответствующих строк подключения к каждому приложению / web.config

Когда я запускаю образец с этими новыми настройками, я замечаю, что NServiceBus.ExtensionMethods статический класс имеет метод SetMessageHeader, который выдает InvalidOperationException, когда я переключаюсь на SqlServerTransport:

public static void SetMessageHeader(this ISendOnlyBus bus, object msg, string key, string value)
{
    IManageMessageHeaders manageMessageHeaders = bus as IManageMessageHeaders;
    if (manageMessageHeaders == null)
        throw new InvalidOperationException("bus does not implement IManageMessageHeaders");
    manageMessageHeaders.SetHeaderAction(msg, key, value);
}

Означает ли это, что SqlServerTransport не поддерживает заголовки сообщений?

Есть ли что-нибудь еще, что не поддерживается транспортом SQL Server, что имеет отношение к нашему решению?

Доступна ли матрица функций / транспорта?

Обновлять:

Ладно, может быть, я тут прыгнул с пистолета. https://github.com/Particular/NServiceBus.SqlServer.Samples, похоже, предполагает, что SqlServerTransport поддерживает заголовки сообщений и саги.

Обновление II

Похоже, что использование одной и той же базы данных как для сохранения (NHibernatePeristence), так и для транспорта (SqlServerTransport) вызывает проблемы. Похоже, что использование отдельных баз данных для каждой роли решило проблему.

Я все еще хотел бы знать, есть ли какие-либо недостатки в использовании SqlServerTransport с точки зрения поддержки функций?


person Rebecca    schedule 13.10.2014    source источник
comment
Не поддерживает заголовки сообщений? Откуда это у тебя?   -  person Damien_The_Unbeliever    schedule 13.10.2014
comment
@Damien_The_Unbeliever обновил мой ответ. Похоже, я был сбит с толку из-за того, что шина не реализует IManageMessageHeaders.   -  person Rebecca    schedule 13.10.2014
comment
Я не знаком с IManageMessageHeaders и, по-видимому, с Google тоже. И, для справки, я только что открыл случайное сообщение из нашей таблицы аудита и посмотрел на заголовки - в нем 25, из которых 5 - наши настраиваемые заголовки, которые мы применяем в нашей системе обмена сообщениями, поэтому я вполне уверен, что это сообщение заголовки поддерживаются на SQL Server.   -  person Damien_The_Unbeliever    schedule 13.10.2014
comment
Вот где это называется:   -  person Rebecca    schedule 13.10.2014
comment
Спасибо @Damien_The_Unbeliever. github.com/Particular/NServiceBus.SqlServer.Samples соглашается с вами!   -  person Rebecca    schedule 13.10.2014
comment
Похоже, что этот интерфейс является новым для версии 5, насколько я понимаю. Не уверен, был ли для этого обновлен транспорт SQL.   -  person Damien_The_Unbeliever    schedule 13.10.2014
comment
@Damien_The_Unbeliever, возможно, тогда это был отвлекающий маневр.   -  person Rebecca    schedule 13.10.2014
comment
У меня такая же проблема, и я не использую SQLServerTransport. Я пытаюсь заставить работать другой образец, и ошибка возникает во внешнем интерфейсе MVC в контроллере в следующей строке: Bus.SetMessageHeader (order, access_token, HttpContext.Current.Request.Params [access_token]);   -  person SashaArz    schedule 14.10.2014
comment
Проверьте, есть ли что-нибудь в вашем объекте Bus. Я понял, что мой объект Bus был пустым, и сообщение вводило в заблуждение.   -  person SashaArz    schedule 14.10.2014
comment
Одна и та же БД предназначена для транспорта, и поддерживается постоянство. В чем заключалась проблема с этой настройкой?   -  person Andreas Öhlund    schedule 15.10.2014


Ответы (1)


При использовании транспорта SQLServer не происходит ухудшения характеристик по сравнению с MSMQ. Интеграция с сохранением NHibenrnate работает нормально, но требует включения «DistributedTransactions» (по умолчанию). Обратите внимание, что если строки подключения транспорта и настойчивости совпадают, на самом деле он не переходит в DTC (без снижения производительности).

person Szymon Pobiega    schedule 10.02.2015