2013-10-31 40 views
1

我們使用InMemoryTransientMessageService在服務之間鏈接多個單向通知。我們不能使用Redis提供程序,到目前爲止我們並不需要它。同步調度就足夠了。嵌套IMessageQueueClient使用ServiceStack發佈InMemoryTransientMessageService

在處理另一個發佈的服務中使用發佈時,我們正在試驗問題。在僞代碼中:

FirstService.Method() _messageQueueClient.Publish(obj);

SecondService.Any(obj) _messageQueueClient.Publish(obj);

ThirdService.Any(OBJ)

的SecondMessage從未處理。在ServiceStack TransientMessageServiceBase,在處理第二個消息的下面的代碼,服務「isRunning」,所以它不會嘗試處理第二:

public virtual void Start() 
    { 
     if (isRunning) return; 
     isRunning = true; 

     this.messageHandlers = this.handlerMap.Values.ToList().ConvertAll(
      x => x.CreateMessageHandler()).ToArray(); 

     using (var mqClient = MessageFactory.CreateMessageQueueClient()) 
     { 
      foreach (var handler in messageHandlers) 
      { 
       handler.Process(mqClient); 
      } 
     } 

     this.Stop(); 
    } 

我不知道要改變這種行爲的影響爲了能夠嵌套/鏈接消息發佈。你認爲取消這張支票是安全的嗎?其他一些想法?

回答

1

經過一些測試,看起來在去除「isRunning」控件時沒有問題。所有嵌套的發佈都正確執行。