public void GroupCreation() { MessageGroupQueue queue = new MessageGroupQueue(100); queue.AddGroup("groupid"); Assert.Throws <ArgumentException>(() => queue.AddGroup("groupid")); }
public void GroupRemoval() { MessageGroupQueue queue = new MessageGroupQueue(100); queue.AddGroup("groupid"); queue.RemoveGroup("groupid"); queue.RemoveGroup("groupid"); }
public void MessageEnqueuing() { MessageGroupQueue queue = new MessageGroupQueue(100); queue.AddGroup("groupid1"); queue.AddMessage("message1", "groupid1"); queue.AddMessage("message2", "groupid1"); queue.AddMessage("message3", "groupid2"); }
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); }
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); }
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); }