Exemple #1
0
        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);
        }
Exemple #2
0
        /// <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);
        }
Exemple #3
0
        /// <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);
        }