0

我是 nServiceBus 的新手。

nServiceBus 版本:2.6.0.1505

我想在数据库中保存 saga。为什么这不起作用:

public class MessageEndpoint : IConfigureThisEndpoint, AsA_Server, IWantCustomInitialization
{
    public void Init()
    {
        Configure.With().DefaultBuilder().Sagas().NHibernateSagaPersister();
    }
}

它抛出一个错误:

Topshelf.Internal.ServiceController`1[[NServiceBus.Host.Internal.GenericHost, NServiceBus.Host, Version=2.6.0.1505, Culture=neutral, PublicKeyToken=9fc386479f8a226c]] 在处理 OnStart 的初始状态期间发生异常

是否可以在这个版本的nServiceBus 中以这种方式配置端点?

编辑:

端点配置更改为:

public class MessageEndpoint : IConfigureThisEndpoint, 
    AsA_Server, 
    IWantCustomInitialization
{
    public void Init()
    {
        Configure.With()
            .DefaultBuilder()
            .XmlSerializer()
            .Sagas()
            .NHibernateSagaPersister();
    }
}

Saga 执行,但抛出异常:

2012-07-30 16:36:12,229 [Worker.5] INFO NServiceBus.Unicast.UnicastBus [(null)] <(null)> - 收到消息 Messages.StartCmd, Messages, Version=1.0.0.0, Cultu re=neutral , PublicKeyToken=null,ID 为 0adbb2fd-4a7d-4fa2-ae09-70bbcbbc8241\206 9 来自发件人 MyWebClient@USER-PC 2012-07-30 16:36:12,232 [Worker.5] INFO NServiceBus.Unicast.UnicastBus [(null) ] <(null)> - 无法模拟,因为传入消息中没有指定 Windows 身份。这在互操作场景中很常见。

2012-07-30 16:36:12,294 [Worker.5] WARN NServiceBus.Unicast.Transport.Msmq.Msmq 传输 [(null)] <(null)> - 未能为 ID= 的消息引发“收到传输消息”事件0adbb2fd-4a7d-4fa2-ae09-70bbcbbc8241\2069 Spring.Objects.Factory.UnsatisfiedDependencyException:创建名称为“NServiceBus.Sagas.Impl.SagaMessageHandler”的对象时出错:通过对象属性“Persister”表示不满足的依赖关系:有2个对象类型 [NService Bus.Saga.ISagaPersister] 用于按类型自动装配,当应该只有 1 能够自动装配对象“NServiceBus.Sagas.Impl”的属性“Persister”时。SagaMessageHandler'。在 Spring.Objects.Factory.Support.AbstractAutowireCapableObjectFactory.Autowi reByType(字符串名称,RootObjectDefinition 定义,
在 Spring.Objects.Factory.Support.AbstractObjectFactory.GetObjectInternal(String name, Type requiredType, Object[] arguments, Boolean suppressConfigure) 在 Spring.Objects.Factory.Support.AbstractObjectFactory.GetObject(String name) 在 Spring.Objects.Factory .Support.DefaultListableObjectFactory.GetObjectsOfTy pe(Type type, Boolean includePrototypes, Boolean includeFactoryObjects) at Spring.Context.Support.AbstractApplicationContext.GetObjectsOfType(Type ty pe, Boolean includePrototypes, Boolean includeFactoryObjects) at NServiceBus.ObjectBuilder.Spring.SpringObjectBuilder.NServiceBus.ObjectBui lder.Common.IContainer.Build(Type typeToBuild) 在 NServiceBus.ObjectBuilder.Common.CommonObjectBuilder.NServiceBus.ObjectBuilder.IBuilder.BuildAndDispatch(Type typeToBuild, Action`1 action)
在 NServiceBus.Unicast.UnicastBus.DispatchMessageToHandlersBasedOnType(IMessa ge toHandle, Type messageType) 在 NServiceBus.Unicast.UnicastBus.HandleMessage(TransportMessage m) 在 NServiceBus.Unicast.UnicastBus.TransportMessageReceived(Object sender, Tra nsportMessageReceivedEventArgs e) 在 NServiceBus.Unicast.Transport .Msmq.MsmqTransport.OnTransportMessageReceive d(TransportMessage 消息)

看起来这就是它失败的原因:

有 2 个类型为 [NService Bus.Saga.ISagaPersister] 的对象用于按类型自动装配,而应该只有 1 个对象能够自动装配对象“NServiceBus.Sagas.Impl”的属性“Persister”。SagaMessageHandler'

4

1 回答 1

1

这是使用 NHibernate 持久化 saga 的方法。

端点配置(不需要 IWantCustomInitialization):

public class MessageEndpoint : IConfigureThisEndpoint, AsA_Server
{
}

诀窍是告诉主机使用生产配置文件 - http://docs.particular.net/nservicebus/hosting/nservicebus-host/profiles

在此处输入图像描述

于 2012-07-30T14:26:18.013 回答