2 Stimmen

NServiceBus-Basisnachrichtenverlag ohne ravenDB

Ich versuche, eine wirklich einfache NServicebus.Host-Anwendung zu erstellen, die jede Sekunde eine Nachricht sendet. Ich möchte keine der NServiceBus Persistenz Sachen verwenden, die RavenDB (dh Timeouts/Sagas) verwendet.

Ich habe Folgendes getan:

public class EndpointConfig : IConfigureThisEndpoint, AsA_Server, AsA_Publisher, IWantCustomInitialization
{
    public void Init()
    {
        Configure.With()
            .DisableTimeoutManager();
    }
}

y

public class MessageSender : IWantToRunWhenTheBusStarts
{
    private readonly IBus _bus;

    public MessageSender(IBus bus)
    {
        _bus = bus;
    }

    public void Run()
    {
        Task.Factory.StartNew(() =>
        {
            while (true)
            {
                _bus.Publish(new MyMessage { Timestamp = DateTime.Now });
                Thread.Sleep(1000);
            }
        });
    }
}

Ich erhalte jedoch eine Ausnahme in der Veröffentlichungszeile:

System.Net.WebException wurde vom Benutzercode nicht behandelt
HResult=-2146233079 Message=Kann keine Verbindung zum Remote-Server herstellen
Quelle=System StackTrace: at System.Net.HttpWebRequest.GetResponse() at Raven.Client.Connection.HttpJsonRequest.ReadStringInternal(Func 1 getResponse) at Raven.Client.Connection.HttpJsonRequest.ReadResponseString() at Raven.Client.Connection.HttpJsonRequest.ReadResponseJson() at Raven.Client.Connection.ServerClient.DirectGet(String serverUrl, String key) at Raven.Client.Connection.ServerClient.<>c__DisplayClass1.<Get>b__0(String u) at Raven.Client.Connection.ServerClient.TryOperation[T](Func 2 operation, String operationUrl, B at Raven.Client.Connection.ServerClient.ExecuteWithReplication[T](String method, Func 2 operation) at Raven.Client.Connection.ServerClient.Get(String key) at Raven.Client.Document.DocumentSession.Load[T](String id) at System.Linq.Enumerable.WhereSelectArrayIterator 2.M bei System.Linq.Enumerable.WhereEnumerableIterator 1.MoveNext() at System.Linq.Enumerable.<SelectManyIterator>d__14 2.MoveNext() bei System.Linq.Enumerable.d_ 81 1.MoveNext() at System.Collections.Generic.List 1..ctor(IEnumerable 1 collection) at System.Linq.Enumerable.ToList[TSource](IEnumerable 1 at NServiceBus.Unicast.UnicastBus.Publish[T](T[] messages) at ClassLibrary1.MessageSender.b _ at System.Threading.Tasks.Task.Execute() InnerException: System.Net.Sockets.SocketException HResult=-2147467259 Message=Es konnte keine Verbindung hergestellt werden, da der Zielcomputer sie aktiv abgelehnt hat 127.0.0.1:8080 Quelle=System FehlerCode=10061 NativeErrorCode=10061 [ ] at System.Net.Sockets.Socket.DoConnect(EndPoint endPoi at System.Net.Sockets.Socket.InternalConnect at System.Net.ServicePoint.ConnectSocketInternal(Boolean connectFailure, Socket s4, Socket s6, Socket& socket, IPAddress& address, ConnectSocketState state, IAsyncResult asyncResult, Exception& exception)

Dies deutet darauf hin, dass NServiceBus immer noch versucht, eine Verbindung zu RavenDB herzustellen.

Was muss ich noch deaktivieren, damit dieses Beispiel funktioniert?

Warum wird überhaupt versucht, eine Verbindung zu RavenDB für eine einfache Veröffentlichung herzustellen?

Hinweis: Ich habe noch keine Abonnenten.

3voto

Not loved Punkte 32126

Es sieht so aus, als ob NServiceBus standardmäßig auch RavenDB für die Speicherung von Abonnements verwendet. Durch die Angabe eines alternativen Speichermechanismus konnte ich dieses Beispiel zum Laufen bringen.

            .MsmqTransport()
                .MsmqSubscriptionStorage()
            .DisableTimeoutManager();

und in der app.config

<configuration>
    <configSections>
        <section name="MessageForwardingInCaseOfFaultConfig" type="NServiceBus.Config.MessageForwardingInCaseOfFaultConfig, NServiceBus.Core" />
        <section name="MsmqSubscriptionStorageConfig" type="NServiceBus.Config.MsmqSubscriptionStorageConfig, NServiceBus.Core" />
    </configSections>
    <MessageForwardingInCaseOfFaultConfig ErrorQueue="error" />
    <MsmqSubscriptionStorageConfig Queue="YourQueue" />
</configuration>

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X