public void Add(IEventTracker eventTracker, Node node) { var message = node.CreateStartJobMessage(eventTracker, Singleton <DIFactory> .Instance.Create <IChannel>("OutOfNodeInSameProcess")); var queue = new BlockingCollection <IMessage>(1); var callback = new QueueBasedMessageReceiver(queue); var obj = Singleton <DIFactory> .Instance.Create <IObject>( new Dictionary <string, object>() { { TypeBasedMessageReceiverRegistryInfoObjectPattern.Type.Name, "StartJobResponse" } } ); MessageBus.Connect(obj, callback); MessageBus.Send(message); IMessage response; var failMessage = "Job " + eventTracker.GetType().Name + " could not start."; if (!queue.TryTake(out response, 2000)) { throw new Exception(failMessage); } if (!ResponseMessageObjectPattern.Success[response]) { throw new Exception(failMessage); } _trackers.Add(eventTracker); }