2013-06-27 44 views
2

我有一個NServiceBus版本3.3.8佐賀,我正在從NServiceBus 2.6遷移。在我升級它之後,我發現隊列中的單個消息正在被傳奇兩次處理。最令人感到奇怪的是NServiceBus將它視爲兩個獨立的傳輸消息,因爲我的IMessageModule實現也被調用了兩次。單一NServiceBus消息由佐賀處理兩次

它正在接收的消息是綁定到NServiceBus 2.6的消息。有沒有人見過這個?我起初以爲這是一個依賴注入問題,因爲我們正在從Unity切換到Autofac,但似乎並沒有解釋MessageModule被調用兩次的問題。

我很感謝您提供的任何幫助。

UPDATE

事實證明,這個問題是我在不經意間創造了依賴注入的問題。這個傳奇有一些額外的依賴,需要IBus和IBus是一個屬性,並通過屬性注入設置。使用Autofac模塊,我試圖通過重寫AttachToComponentRegistration和注入所有註冊項目這樣的特性,以簡化配置:

protected override void AttachToComponentRegistration(IComponentRegistry componentRegistry, IComponentRegistration registration) { 
    registration.Activating += (s, e) => e.Context.InjectProperties(e.Instance); 
} 

然而,這導致上述問題。爲了解決這個問題,我刪除此覆蓋,並通過電話手動設置屬性注入:

builder.RegisterType<Implementation>().As<Interface>().PropertiesAutowired(); 

這解決了我的重複處理問題。我仍然不確定它爲什麼會導致此問題,但刪除該重寫確實會阻止重複的消息處理。

+0

我有一個正常的處理程序,一個容器錯誤,然後一個奇怪的重複消息類似的問題。這裏發生了什麼? – brumScouse

回答

0

事實證明,這個問題是我無意中創建的依賴注入問題。這個傳奇有一些額外的依賴,需要IBus和IBus是一個屬性,並通過屬性注入設置。使用Autofac模塊,我試圖通過重寫AttachToComponentRegistration和注入所有註冊項目這樣的特性,以簡化配置:

protected override void AttachToComponentRegistration(IComponentRegistry componentRegistry, IComponentRegistration registration) { 
     registration.Activating += (s, e) => e.Context.InjectProperties(e.Instance); 
    } 

然而,這導致上述問題。爲了解決這個問題,我刪除此覆蓋,並通過電話手動設置屬性注入:

builder.RegisterType<Implementation>().As<Interface>().PropertiesAutowired(); 

這解決了我的重複處理問題。我仍然不確定它爲什麼會導致此問題,但刪除該重寫確實會阻止重複的消息處理。

+1

感謝您的更新,當用戶這樣做的時候喜歡它。 –

相關問題