/// <summary>
        /// Отправляет сообщение в очередь с сериализованным объектом
        /// </summary>
        /// <typeparam name="T">Тип объекта сообщения</typeparam>
        /// <param name="mq">клиент очереди</param>
        /// <param name="queueUrl">URL очереди</param>
        /// <param name="message">Экземпляр объекта для сообщения</param>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        public static Task <SendMessageResponse> SendMessageAsync <T>(this IYandexMq mq, string queueUrl, T message, CancellationToken cancellationToken = default)
        {
            var request = new SendMessageRequest()
                          .SetQueueUrl(queueUrl)
                          .AddMessage(message);

            return(mq.SendMessageAsync(request, cancellationToken));
        }
        /// <summary>
        /// Метод для удаления сообщения из очереди. Чтобы указать, какое сообщение следует удалить, используйте параметр ReceiptHandle
        /// </summary>
        /// <param name="mq"></param>
        /// <param name="queueUrl"></param>
        /// <param name="receiptHandle"></param>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        public static Task <DeleteMessageResponse> DeleteMessageAsync(this IYandexMq mq, string queueUrl, string receiptHandle, CancellationToken cancellationToken = default)
        {
            var request = new DeleteMessageRequest()
            {
                QueueUrl      = queueUrl,
                ReceiptHandle = receiptHandle
            };

            return(mq.DeleteMessageAsync(request, cancellationToken));
        }
        /// <summary>
        /// Метод для отправки сообщения в указанную очередь. В теле сообщения можно передавать только XML, JSON и неформатированный текст
        /// </summary>
        /// <param name="mq"></param>
        /// <param name="queueUrl"></param>
        /// <param name="messageBody"></param>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        public static Task <SendMessageResponse> SendMessageAsync(this IYandexMq mq, string queueUrl, string messageBody, CancellationToken cancellationToken = default)
        {
            var request = new SendMessageRequest()
            {
                QueueUrl    = queueUrl,
                MessageBody = messageBody
            };

            return(mq.SendMessageAsync(request, cancellationToken));
        }
        /// <summary>
        /// Метод для отправки сообщения в указанную очередь. В теле сообщения можно передавать только XML, JSON и неформатированный текст
        /// </summary>
        /// <param name="mq"></param>
        /// <param name="queueUrl"></param>
        /// <param name="messageBody"></param>
        /// <param name="attributes"></param>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        public static Task <SendMessageResponse> SendMessageAsync(this IYandexMq mq, string queueUrl, string messageBody, Dictionary <string, MessageAttributeValue> attributes, CancellationToken cancellationToken = default)
        {
            var request = new SendMessageRequest()
            {
                QueueUrl         = queueUrl,
                MessageBody      = messageBody,
                MessageAttribute = attributes
            };

            return(mq.SendMessageAsync(request, cancellationToken));
        }