【发布时间】:2016-01-29 11:22:39
【问题描述】:
我是 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,版本=2.6.0.1505,文化=中性, PublicKeyToken=9fc386479f8a226c]] during state Initial while processing 开机
在这个版本的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] 信息 NServiceBus.Unicast.UnicastBus [(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] 信息 NServiceBus.Unicast.UnicastBus [(null)] - 不能 模拟,因为传入消息中没有指定 Windows 身份。 这在互操作场景中很常见。
2012-07-30 16:36:12,294 [Worker.5] 警告 NServiceBus.Unicast.Transport.Msmq.Msmq 传输 [(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 定义,IObjectWrapper 包装器,M utablePropertyValues 属性)在 Spring.Objects.Factory.Support.AbstractAutowireCapableObjectFactory.Popula teObject(字符串名称,RootObjectDefinition 定义,IObjectWrapper 包装器)在 Spring.Objects.Factory.Support.AbstractAutowireCapableObjectFactory.Config ureObject(字符串名称,RootObjectDefinition 定义,IObjectWrapper 包装器)在 Spring.Objects.Factory.Support.AbstractAutowireCapableObjectFactory.Instan tiateObject(字符串名称,RootObjectDefinition 定义,对象 [] 参数,布尔值allowEagerCaching,布尔值suppressConfigure)
在 Spring.Objects.Factory.Support.AbstractObjectFactory.GetObjectInternal(Str ing 名称、类型 requiredType、Object[] 参数、布尔值 抑制配置)在 Spring.Objects.Factory.Support.AbstractObjectFactory.GetObject(字符串 名称)在 Spring.Objects.Factory.Support.DefaultListableObjectFactory.GetObjectsOfTy pe(Type type, Boolean includePrototypes, Boolean 包括工厂对象)在 Spring.Context.Support.AbstractApplicationContext.GetObjectsOfType(类型 类型,布尔 includePrototypes,布尔 includeFactoryObjects)在 NServiceBus.ObjectBuilder.Spring.SpringObjectBuilder.NServiceBus.ObjectBui lder.Common.IContainer.Build(类型 typeToBuild)在 NServiceBus.ObjectBuilder.Common.CommonObjectBuilder.NServiceBus.ObjectBui lder.IBuilder.BuildAndDispatch(类型 typeToBuild,Action`1 动作)
在 NServiceBus.Unicast.UnicastBus.DispatchMessageToHandlersBasedOnType(IMessa ge toHandle, 类型 messageType) at NServiceBus.Unicast.UnicastBus.HandleMessage(TransportMessage m) 在 NServiceBus.Unicast.UnicastBus.TransportMessageReceived(对象发送者, Tra nsportMessageReceivedEventArgs e) 在 NServiceBus.Unicast.Transport.Msmq.MsmqTransport.OnTransportMessageReceive d(TransportMessage 消息)
看起来这就是它失败的原因:
有 2 个 [NService Bus.Saga.ISagaPersister] 类型的对象用于 按类型自动装配,当应该只有 1 能够 对象“NServiceBus.Sagas.Impl”的自动装配属性“Persister”。 SagaMessageHandler'
【问题讨论】:
-
您是否查看了 NSB 附带的 Saga 示例?你有 Saga 配置集吗?
-
我在配置文件中有 NHibernateSagaPersisterConfig 部分。
标签: nservicebus