Esempio n. 1
0
        public void GroupCreation()
        {
            MessageGroupQueue queue = new MessageGroupQueue(100);

            queue.AddGroup("groupid");
            Assert.Throws <ArgumentException>(() => queue.AddGroup("groupid"));
        }
Esempio n. 2
0
        public void GroupRemoval()
        {
            MessageGroupQueue queue = new MessageGroupQueue(100);

            queue.AddGroup("groupid");

            queue.RemoveGroup("groupid");
            queue.RemoveGroup("groupid");
        }
Esempio n. 3
0
        public void MessageEnqueuing()
        {
            MessageGroupQueue queue = new MessageGroupQueue(100);

            queue.AddGroup("groupid1");

            queue.AddMessage("message1", "groupid1");
            queue.AddMessage("message2", "groupid1");
            queue.AddMessage("message3", "groupid2");
        }
Esempio n. 4
0
        public void MessageWaiting()
        {
            MessageGroupQueue queue = new MessageGroupQueue(100);

            queue.AddGroup("groupid");

            string message = null;

            Task.Run(() =>
            {
                message = queue.WaitMessage("groupid");
            });

            queue.AddMessage("message", "groupid");

            Thread.Sleep(100);
            Assert.Equal("message", message);
        }
Esempio n. 5
0
        public void WaitingInterruption()
        {
            MessageGroupQueue queue = new MessageGroupQueue(100);

            queue.AddGroup("groupid");

            string    message   = "message";
            Stopwatch stopwatch = new Stopwatch();

            Task.Run(() =>
            {
                stopwatch.Start();
                message = queue.WaitMessage("groupid");
                stopwatch.Stop();
            });

            queue.Dispose();

            Thread.Sleep(100);
            Assert.Null(message);
            Assert.True(stopwatch.ElapsedMilliseconds < 100);
        }
Esempio n. 6
0
        public RabbitMQDriver(string connectionString)
        {
            Dictionary <string, string> settings = connectionString.ParseConnStr();

            //creates the connection
            ConnectionFactory connectionFactory = new ConnectionFactory();

            connectionFactory.HostName    = settings["Host"];
            connectionFactory.VirtualHost = settings["VHost"];
            connectionFactory.Port        = int.Parse(settings["Port"]);
            connectionFactory.UserName    = settings["User"];
            connectionFactory.Password    = settings["Password"];
            connectionFactory.AutomaticRecoveryEnabled = true;
            _connection = connectionFactory.CreateConnection();

            //creates channels
            _requestChannel   = _connection.CreateModel();
            _notifyChannel    = _connection.CreateModel();
            _responderChannel = _connection.CreateModel();
            _responderChannel.BasicQos(0, RESPONDER_PREFETCHCOUNT, false);
            _eventHandlerChannel = _connection.CreateModel();
            _eventHandlerChannel.BasicQos(0, EVENT_HANDLER_PREFETCHCOUNT, false);
            _deadLetterQueueChannel = _connection.CreateModel();

            //application identifier
            _appId = settings["AppId"];

            //builder for container
            Injection = new ServiceCollection();

            //response queue
            _responseQueue = new MessageGroupQueue(REQUEST_TIMEOUT);

            //response listener
            EventingBasicConsumer consumer = new EventingBasicConsumer(_requestChannel);

            consumer.Received += (obj, args) =>
            {
                _responseQueue.AddMessage(Encoding.UTF8.GetString(args.Body.ToArray()), args.BasicProperties.CorrelationId);
            };

            _requestChannel.BasicConsume(DIRECT_REPLY_QUEUE, true, consumer);

            //dependency injection container
            _serviceProvider = null;

            //list of to activate consumers
            _toActivateConsumers = new List <Tuple <IModel, string, EventingBasicConsumer> >();

            //custom task schedulers
            _sendTaskScheduler            = new MultiThreadTaskScheduler(SEND_NUMBER_OF_THREADS);
            _receiveTaskScheduler         = new MultiThreadTaskScheduler(RECEIVE_NUMBER_OF_THREADS);
            _deadLetterQueueTaskScheduler = new MultiThreadTaskScheduler(DEAD_LETTER_QUEUE_NUMBER_OF_THREADS);

            //cancellation token
            _cancellationTokenSource = new CancellationTokenSource();

            //default logger
            _loggerType = typeof(DefaultLogger);

            //default tracer
            _tracerType = typeof(DefaultTracer);

            //json converter
            _jsonConverter = new JsonConverter();

            //cache handler
            _cacheHandler = new CacheHandler(CACHE_LIMIT, CACHE_DURATION);
        }