public void ShouldExecuteCommandWithinSession() { // Given var commandExecutor = new Mock <ICommandExecutor>(); commandExecutor.Setup(m => m.Execute(It.IsAny <Action>())).Callback <Action>(command => command()); var session = new Mock <IMessageQueueSession>(); var sessionManager = new Mock <IMessageQueueSessionManager>(); sessionManager.Setup(m => m.OpenSession()).Returns(session.Object).Callback(() => session.SetupGet(m => m.IsOpen).Returns(true)); sessionManager.Setup(m => m.CloseSession(session.Object)).Callback(() => session.SetupGet(m => m.IsOpen).Returns(false)); var target = new MessageQueueCommandExecutor(commandExecutor.Object, sessionManager.Object); // When var isOpen = false; target.Execute(s => isOpen = s.IsOpen); // Then Assert.IsTrue(isOpen); Assert.IsFalse(session.Object.IsOpen); }
/// <summary> /// Создать сервис для публикации сообщений. /// </summary> public IMessageQueuePublisher CreateMessageQueuePublisher() { if (_queuePublisher == null) { // Сессия на поток, чтобы иметь возможность быстрой публикации сообщений var sessionManager = new MessageQueueSessionManagerPerThread(_sessionFactory); var commandExecutor = new MessageQueueCommandExecutor(_commandExecutor, sessionManager); _queuePublisher = new MessageQueuePublisher(commandExecutor); } return(_queuePublisher); }
/// <summary> /// Создать сервис для управления подписками на очереди сообщений. /// </summary> public IMessageQueueManager CreateMessageQueueManager() { if (_queueManager == null) { // Сессия на команду, чтобы обеспечить изоляцию при выполнении команд var sessionManager = new MessageQueueSessionManagerPerCommand(_sessionFactory); var commandExecutor = new MessageQueueCommandExecutor(_commandExecutor, sessionManager); _queueManager = new MessageQueueManager(commandExecutor, _queueListener, _defaultExchangeConfig, _defaultQueueConfig); } return(_queueManager); }