public string SerializeData(IdempotencyData data) { if (data == null) { return(null); } return(JsonConvert.SerializeObject(data)); }
/// <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); }