1

NserviceBus 5.2 で SendOnlyBus を使用していますが、セットアップ コードは次のようになります。

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 では動作しません。不足しているものや間違っているものを見つけることができません。助けていただければ幸いです。

ありがとう

4

1 に答える 1

2

説明

送信専用エンドポイントを要求したため、NServiceBus はサブスクリプションの永続性を構成していません。

送信専用エンドポイントには入力キューがありません。つまり、サブスクリプションを受信して​​保存する方法がありません。サブスクライバーがいない場合、公開しようとしても意味がありません。

また

  • 送信のみのバスを保持しますが、使用Bus.Publish()からに切り替えますBus.Send()

また

  • return Bus.Create(busConfiguration)の代わりに呼び出して完全なバスを使用するreturn Bus.CreateSendOnly(busConfiguration)


コードサンプル

NServiceBus 5.2.0およびNServiceBus.NHibernate 6.1.2でサブスクリプションの永続性として NHibernate を使用してイベントを発行するために必要な唯一のコードは次のとおりです。

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>
于 2015-05-21T14:03:50.760 に答える