【问题标题】:NServiceBus basic message publisher without ravenDB没有 ravenDB 的 NServiceBus 基本消息发布者
【发布时间】:2012-09-06 21:37:07
【问题描述】:

我正在尝试创建一个非常基本的 NServicebus.Host 应用程序,它每秒发送一条消息。我不想使用任何使用 RavenDB 的 NServiceBus 持久性东西(即超时/传奇)。

我做了以下事情:

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

和

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);
            }
        });
    }
}

但是我在发布行遇到异常:

System.Net.WebException 未被用户代码处理
HResult=-2146233079 消息=无法连接到远程服务器
源 = 系统堆栈跟踪: 在 System.Net.HttpWebRequest.GetResponse() 在 Raven.Client.Connection.HttpJsonRequest.ReadStringInternal(Func1 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](Func2 操作,字符串 operationUrl,布尔避免投掷,T& 结果) 在 Raven.Client.Connection.ServerClient.ExecuteWithReplication[T](字符串 方法,Func2 operation) at Raven.Client.Connection.ServerClient.Get(String key) at Raven.Client.Document.DocumentSession.Load[T](String id) at System.Linq.Enumerable.WhereSelectArrayIterator2.MoveNext() 在 System.Linq.Enumerable.WhereEnumerableIterator1.MoveNext() at System.Linq.Enumerable.<SelectManyIterator>d__142.MoveNext() 在 System.Linq.Enumerable.d_811.MoveNext() at System.Collections.Generic.List1..ctor(IEnumerable1 collection) at System.Linq.Enumerable.ToList[TSource](IEnumerable1 源) 在 NServiceBus.Unicast.UnicastBus.Publish[T](T[] 消息) 在 ClassLibrary1.MessageSender.b_1() 中 在 System.Threading.Tasks.Task.Execute() InnerException: System.Net.Sockets.SocketException H结果=-2147467259 Message=无法建立连接,因为目标机器主动拒绝它 127.0.0.1:8080 源=系统 错误代码=10061 本机错误代码=10061 堆栈跟踪: 在 System.Net.Sockets.Socket.DoConnect(端点 endPointSnapshot,SocketAddress 套接字地址) 在 System.Net.Sockets.Socket.InternalConnect(端点 remoteEP) 在 System.Net.ServicePoint.ConnectSocketInternal(布尔连接失败,套接字 s4,套接字 s6,套接字&套接字,IPAddress& 地址,ConnectSocketState 状态,IAsyncResult asyncResult, 异常&异常)

这表明 NServiceBus 仍在尝试连接到 RavenDB。

我还需要禁用什么才能使此示例正常运行?

为什么它甚至尝试连接到 RavenDB 进行基本发布?

注意:我还没有订阅者。

【问题讨论】:

    标签: c# nservicebus


    【解决方案1】:

    看起来 NServiceBus 默认也使用 RavenDB 进行订阅存储。通过指定一个备用存储机制,我能够让这个示例正常工作。

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

    在 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>
    

    【讨论】:

    • 仅供参考,当您开始生产时,您必须循环进入新的单独 NH 组件(这是 NH 子存储所在的位置)。
    • 嗨,卢克,你知道吗,我在 NServiceBus Windows 服务启动时收到此错误 - 它似乎正在寻找 RavenDB,但我们没有任何 RavenDB,但我们没有任何 RavenDB,而是带有 MSMQ 的 SQL Server。 MESSAGE:Autofac.Core.DependencyResolutionException:在“RavenTimeoutPersistence”类型上调用构造函数“Void .ctor(Raven.Client.IDocumentStore)”时引发异常。 ---> System.Net.WebException: Unable to connect to the remote server ---> System.Net.Sockets.SocketException: 无法建立连接,因为目标机器主动拒绝[::1]:8080跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-14
    • 1970-01-01
    • 1970-01-01
    • 2010-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多