/// <summary> /// /// </summary> /// <typeparam name="T"></typeparam> /// <param name="queueDataModels">Herhangi bir tipte gönderilebilir where koşullaırına uyan</param> /// <param name="queueName">Queue kuyrukta hangi isimde tutulacağı bilgisi operasyon istek zamanı gönderilebilir.</param> public void Enqueue <T>(IEnumerable <T> queueDataModels, string queueName) where T : class, new() { try { var _connection = _rabbitMQServices.GetConnection(); using (var _channel = _rabbitMQServices.GetModel(_connection)) { _channel.QueueDeclare(queue: queueName, durable: true, // ile in-memory mi yoksa fiziksel olarak mı saklanacağı belirlenir. exclusive: false, // yalnızca bir bağlantı tarafından kullanılır ve bu bağlantı kapandığında sıra silinir - özel olarak işaretlenirse silinmez autoDelete: false, // en son bir abonelik iptal edildiğinde en az bir müşteriye sahip olan kuyruk silinir arguments: null); // isteğe bağlı; eklentiler tarafından kullanılır ve TTL mesajı, kuyruk uzunluğu sınırı, vb. var properties = _channel.CreateBasicProperties(); properties.Persistent = true; properties.Expiration = RabbitMQConsts.MessagesTTL.ToString(); foreach (var queueDataModel in queueDataModels) { var body = Encoding.UTF8.GetBytes(_objectConvertFormat.ObjectToJson(queueDataModel)); _channel.BasicPublish("", queueName, false, basicProperties: properties, body: body); } } } catch (Exception ex) { //loglama yapılabilir throw new Exception(ex.InnerException.Message.ToString()); } }
public async Task Start() { try { _semaphore = new SemaphoreSlim(RabbitMQConsts.ParallelThreadsCount); _connection = _rabbitMQServices.GetConnection(); _channel = _rabbitMQServices.GetModel(_connection); _channel.QueueDeclare(queue: RabbitMQConsts.RabbitMqConstsList.QueueNameEmail.ToString(), durable: true, exclusive: false, autoDelete: false, arguments: null); _channel.BasicQos(0, RabbitMQConsts.ParallelThreadsCount, false); _consumer = new EventingBasicConsumer(_channel); _consumer.Received += Consumer_Received; await Task.FromResult(_channel.BasicConsume(queue: RabbitMQConsts.RabbitMqConstsList.QueueNameEmail.ToString(), autoAck: false, /* autoAck: bir mesajı aldıktan sonra bunu anladığına * dair(acknowledgment) kuyruğa bildirimde bulunur ya da timeout gibi vakalar oluştuğunda * mesajı geri çevirmek(Discard) veya yeniden kuyruğa aldırmak(Re-Queue) için dönüşler yapar*/ consumer: _consumer)); } catch (Exception ex) { throw new Exception(ex.InnerException.Message.ToString()); } }