public string SerializeData(IdempotencyData data)
 {
     if (data == null)
     {
         return(null);
     }
     return(JsonConvert.SerializeObject(data));
 }
Exemple #2
0
    /// <inheritdoc />
    public async ValueTask WriteIdempotencyData(string key, IdempotencyData idempotencyData, CancellationToken cancellationToken = default)
    {
        await using var resultStream = new MemoryStream();
        await using (var brotliStream = new BrotliStream(resultStream, CompressionLevel.Optimal))
            await JsonSerializer.SerializeAsync(brotliStream, idempotencyData, cancellationToken : cancellationToken);

        var db = _redisProvider.ConnectionMultiplexer.GetDatabase();
        await db.StringSetAsync(key, resultStream.ToArray(), TimeSpan.FromHours(2));
    }
        public async Task TestFullBlownStoreAndRetrieve()
        {
            // Arrange
            var msgId = Guid.NewGuid().ToString();

            var idempotencyData = new IdempotencyData();

            idempotencyData.MarkMessageAsHandled(Guid.NewGuid().ToString());
            idempotencyData.AddOutgoingMessage(
                Guid.NewGuid().ToString(),
                new [] { "test_destination" },
                new TransportMessage(new Dictionary <string, string>(), Encoding.ASCII.GetBytes("test_body")));

            var msgData = new MessageData
            {
                MessageId            = msgId,
                InputQueueAddress    = "testQueueName",
                ProcessingThreadId   = 123,
                TimeThreadIdAssigned = new DateTime(2017, 3, 27, 1, 23, 45),
                IdempotencyData      = idempotencyData
            };

            // Act
            await _messageStorage.InsertOrUpdate(msgData);

            var retrievedMsgData = await _messageStorage.Find(msgId);


            // Assert
            Assert.Equal(msgData.MessageId, retrievedMsgData.MessageId);
            Assert.Equal(msgData.InputQueueAddress, retrievedMsgData.InputQueueAddress);
            Assert.Equal(msgData.ProcessingThreadId, retrievedMsgData.ProcessingThreadId);
            Assert.Equal(msgData.TimeThreadIdAssigned, retrievedMsgData.TimeThreadIdAssigned);
            Assert.Equal(msgData.IdempotencyData.HandledMessageIds, retrievedMsgData.IdempotencyData.HandledMessageIds);
            Assert.Equal(msgData.IdempotencyData.OutgoingMessages[0].MessageId, retrievedMsgData.IdempotencyData.OutgoingMessages[0].MessageId);
        }