2013-07-08 121 views
0

發佈者和訂戶都啓動沒有錯誤,但訂戶沒有響應時,我發佈消息(它應該打印到屏幕上的東西)。請幫忙!!nservicebus用戶沒有收到消息

用戶的app.config看起來是這樣的:

<add Messages = "Messages" Assembly = "Messages" Endpoint = "MyPublisher" /> 

終點爲出版商:

Configure.With() 
    .DefaultBuilder() 
    .JsonSerializer 
    .DefiningEventsAs(t => t.Namespace != null && t.Namespace == "Messages") 
    .MsmqSubscriptionStorage 

端點的用戶:

Configure.With() 
    .DefaultBuilder() 
    .JsonSerializer 
    .DefiningEventsAs(t => t.Namespace != null && t.Namespace == "Messages"); 
+0

您是否明確指定發佈商「MyPublisher」或者是否採用默認值? –

回答

2

有沒有大量的信息在這裏。但這裏是你可以測試的

  1. 你指定名稱空間是「消息」,沒有別的。它是否正確?記錄NServiceBus應該聲明它找到了消息,並且可以將它們映射到處理程序。所以程序集名稱和名稱空間都應該是「消息」
  2. 您可以在發佈者傳入隊列上啓用日記功能。每當訂閱者首次啓動時,它就開始向發佈者發送消息。無論!在該消息中,它表示它正在訂閱某些消息。如果該消息永遠不會到達發佈者,那就是您的問題。
  3. 裝配版本可能是個問題。如果發佈者和訂閱者具有與消息不同的程序集版本,則發佈者會認爲沒有訂閱者。
  4. 至於發佈者,訂閱者還需要能夠將消息映射到處理程序。記錄應該說明。用戶也應該收到消息。通過開啓日記功能來驗證這一點。
  5. 在單臺機器上進行測試。如果在遠程計算機上,發佈者應該在「傳出隊列」文件夾中有一個連接到另一臺計算機。在開始服務併發送訂閱消息之後,訂戶也是如此。
  6. 某處應該存儲訂閱消息,除非您正在使用內存存儲。換句話說,當使用SQL Server或RavenDB存儲訂閱時,訂閱者(顯然)的訂閱應該是可見的。
  7. 如果您使用InMemory訂閱存儲,顯然您不應該關閉發佈服務器,否則您的訂閱將消失。如果您已轉向發佈商,訂閱者需要再次發送訂閱消息。這是在服務啓動時自動完成的。

希望這有助於找到解決方案。

+0

我甚至沒有指定'assembly'屬性。這最終解決了我的問題! – Ropstah

+0

@Ropstah什麼程序集屬性? – Sinaesthetic

+0

@Sinaesthetic配置中的一個,記錄在這裏:https://docs.particular.net/nservicebus/messaging/routing?version=core_5#command-routing –