/// <summary> /// Start replay listeners /// </summary> public void StartReplay() { if (IsReplaying) { throw new BusConfigurationException("Attempted to replay the MicroserviceHost, but it is already replaying."); } Logger.LogInformation($"Starting replay with {ReplayListeners.Count()} replay listeners"); IsReplaying = true; foreach (MicroserviceReplayListener callback in ReplayListeners.Append(StartListener).Append(EndListener)) { if (callback == null) { continue; } Logger.LogInformation($"Registering replay queue {callback.Queue} with expressions: {string.Join(", ", callback.TopicExpressions)}"); IMessageReceiver receiver = Context.CreateMessageReceiver(callback.Queue, callback.TopicExpressions); receiver.StartReceivingMessages(); receiver.StartHandlingMessages(callback.Callback); ReplayMessageReceivers.Add(receiver); } }
/// <summary> /// Stop replay listeners /// </summary> public void StopReplay() { if (!IsReplaying) { throw new BusConfigurationException("Attempted to stop replaying the MicroserviceHost, but it is not replaying."); } Logger.LogInformation($"Stopping replay with {ReplayListeners.Count()} replay listeners"); IsReplaying = false; using IModel model = Context.Connection.CreateModel(); foreach (MicroserviceReplayListener microserviceReplayListener in ReplayListeners) { model.QueueDelete(microserviceReplayListener.Queue); } ReplayMessageReceivers.ForEach(e => e.Dispose()); }