Beispiel #1
0
        public void Rekeep <T>(string keepName, IStoredMessage <T> message)
        {
            message.StoreCount++;
            message.LastStoreTime = DateTimeOffset.Now;
            var payload = JsonConvert.SerializeObject(message.Payload);

            Insert(keepName, message.OriginalStoreTime, message.LastStoreTime, message.StoreCount, payload);
        }
        private async Task KeepRetrieveRekeepLoopAsync(int iterations, ConcurrentDictionary <string, int> items)
        {
            var messageKeeper = MessageKeeperFactory.GetMessageKeeper(ConnectionString);

            // create a number of different orders concurrently (with other running tasks)
            for (int i = 0; i < iterations; i++)
            {
                var order = CreateOrder();
                await messageKeeper.KeepAsync("Orders", order);
            }

            // then retrieve and rekeep from all running tasks concurrently
            for (int i = 0; i < iterations; i++)
            {
                var storedOrder = await messageKeeper.RetrieveMessageAsync <Order>("Orders");

                if (storedOrder != null)
                {
                    var key = storedOrder.Payload.OrderId + ":" + storedOrder.StoreCount;
                    if (items.ContainsKey(key))
                    {
                        items[key]++;
                    }
                    else
                    {
                        items.TryAdd(key, 1);
                    }
                    await messageKeeper.RekeepAsync("Orders", storedOrder);
                }
            }

            // finally Retrieve all the orders to empty the keep
            IStoredMessage <Order> storedMessage = await messageKeeper.RetrieveMessageAsync <Order>("Orders");

            while (storedMessage != null)
            {
                var key = storedMessage.Payload.OrderId + ":" + storedMessage.StoreCount;
                if (items.ContainsKey(key))
                {
                    items[key]++;
                }
                else
                {
                    items.TryAdd(key, 1);
                }

                storedMessage = await messageKeeper.RetrieveMessageAsync <Order>("Orders");
            }
        }
Beispiel #3
0
 public async Task RekeepAsync <T>(string keepName, IStoredMessage <T> message)
 {
     await Task.Run(() => Rekeep(keepName, message));
 }