2
我目前正在將我的Rebus 0.45更新爲0.70.3,並且遇到了關於我的傳奇配置的一些問題/想法。以前我也做了以下內容:使用UnitOfWork配置Rebus傳奇
var rebusConfigurer = Configure.With(new WindsorContainerAdapter(container))
.Logging(l => l.Log4Net()).Transport(t => t.UseMsmqAndGetInputQueueNameFromAppConfig())
.MessageOwnership(o => o.FromRebusConfigurationSection())
.Sagas(s => s.StoreInSqlServer(() => (SqlConnection)container.Resolve<INHibernateSessionFactory>().CreateSession().Connection, "sagas", "saga_index"))
.SpecifyOrderOfHandlers(s => s.Use(new MyMessageHandlerInspector()));
現在,我必須使用ConnectionHolder我開始想,如果有可能使用我用我的處理程序相同UnitOfWorkManager在我的傳奇呢? 我的處理程序被配置爲這樣:
rebusConfigurer.Events(e =>
{
e.MessageSent += AutomaticallySetTimeToBeReceived;
e.UncorrelatedMessage += EOnUncorrelatedMessage;
e.PoisonMessage += EOnPoisonMessage;
e.AddUnitOfWorkManager(new RebusNHibernateUnitOfWorkManager(container.Resolve<ISessionFactory>()));
});
如果這是不可能使用相同的UnitOfWork的事件和傳奇故事,我只是需要它來工作,在0.45我懷疑,我應該做點什麼沿這些行:
var rebusConfigurer = Configure.With(new WindsorContainerAdapter(container))
.Logging(l => l.Log4Net()).Transport(t => t.UseMsmqAndGetInputQueueNameFromAppConfig())
.MessageOwnership(o => o.FromRebusConfigurationSection())
.Sagas(s => s.StoreInSqlServer(() => ConnectionHolder.ForNonTransactionalWork((SqlConnection)container.Resolve<INHibernateSessionFactory>().CreateSession().Connection), "sagas", "saga_index"))
.SpecifyOrderOfHandlers(s => s.Use(new MyMessageHandlerInspector()));
我正在使用NHibernate,所以我可以使用該技巧來獲得交易。 如果Saga和Handler使用相同的會話,或者會導致一些奇怪的行爲,如果其中一個失敗?否則,我只是使用UnitOfWorkManager爲佐賀創建一個新的會話,然後用這個技巧得到這個交易,我想呢? – Thestrup
如果他們使用相同的,他們將在同一個數據庫事務中完成他們的工作。我可以看到沒有理由,爲什麼它不應該只是工作:) – mookid8000