Отправлять только конечные точки не может публиковать сообщения NserviceBus 5.2
Я использую SendOnlyBus с NserviceBus 5.2 и мой установочный код похож на
busConfiguration.UsePersistence<NHibernatePersistence,StorageType.Subscriptions>();
busConfiguration.AssembliesToScan(AssembliesToScan);
busConfiguration.UseTransport<MsmqTransport>();
busConfiguration.PurgeOnStartup(false);
busConfiguration.UseSerialization<XmlSerializer>();
return Bus.CreateSendOnly(busConfiguration);
и web.config
<section name="UnicastBusConfig" type="NServiceBus.Config.UnicastBusConfig, NServiceBus.Core" />
<section name="MsmqTransportConfig" type="NServiceBus.Config.TransportConfig, NServiceBus.Core" />
<MsmqTransportConfig InputQueue="XXX" ErrorQueue="XXX" NumberOfWorkerThreads="X" MaxRetries="X" />
<UnicastBusConfig>
<MessageEndpointMappings>
<add Messages="X" Endpoint="X" />
</MessageEndpointMappings>
</UnicastBusConfig>
<add name="NServiceBus/Persistence" connectionString="Data Source=XXX;database=XXX;User ID=XX;Password=XXx;" />
<add key="NServiceBus/Persistence/NHibernate/dialect" value="NHibernate.Dialect.MsSql2005Dialect" />
<add key="NServiceBus/Persistence/NHibernate/connection.provider" value="NHibernate.Connection.DriverConnectionProvider" />
<add key="NServiceBus/Persistence/NHibernate/connection.driver_class" value="NHibernate.Driver.SqlClientDriver" />
это приводит к ошибке при публикации сообщения.
Не удается опубликовать на этой конечной точке - хранилище подписки не настроено."
Если я использую постоянство памяти, он работает нормально, но не с Hibernate DB-Subscription, не в состоянии выяснить, что отсутствует или неправильно. Цените любую помощь?
Спасибо
1 ответ
объяснение
NServiceBus не настраивает сохранение подписки, потому что вы запросили конечную точку только для отправки.
Конечные точки отправки только не имеют входной очереди, что означает, что у них нет возможности получать и хранить подписки. Попытка публикации не имеет смысла, если у вас нет подписчиков.
Или
- оставить шину только для отправки, но не использовать
Bus.Publish()
вBus.Send()
или же
- использовать полный автобус по телефону
return Bus.Create(busConfiguration)
вместоreturn Bus.CreateSendOnly(busConfiguration)
Пример кода
Единственный код, необходимый для публикации события с помощью NHibernate в качестве персистентности подписки на NServiceBus 5.2.0 и NServiceBus.NHibernate 6.1.2, заключается в следующем:
Program.cs
using System;
using NServiceBus;
using NServiceBus.Features;
using NServiceBus.Persistence;
class Program
{
static void Main()
{
BusConfiguration busConfiguration = new BusConfiguration();
busConfiguration.DisableFeature<TimeoutManager>();
busConfiguration.UsePersistence<NHibernatePersistence, StorageType.Subscriptions>();
using (IStartableBus bus = Bus.Create(busConfiguration))
{
bus.Start();
bus.Publish(new SomeEvent());
Console.WriteLine("Published an event");
Console.ReadLine();
}
}
class SomeEvent : IEvent {}
}
app.config
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<connectionStrings>
<add name="NServiceBus/Persistence" connectionString="Data Source=.;database=database;User ID=user;Password=password;"/>
</connectionStrings>
<appSettings>
<add key="NServiceBus/Persistence/NHibernate/dialect" value="NHibernate.Dialect.MsSql2012Dialect" />
</appSettings>
</configuration>