public bool DeduplicateMessage(string clientId, DateTime timeReceived)
        {
            try
            {
                using (var redisClient = RedisClientsManager.GetClient())
                {
                    var gatewayMessage = redisClient.As <GatewayMessage>().GetValue(EndpointName + clientId);

                    if (gatewayMessage != null)
                    {
                        Logger.InfoFormat("DeduplicatedMessage found gatewayMessage {0}", gatewayMessage.Id);
                        return(false);
                    }

                    gatewayMessage = new GatewayMessage
                    {
                        Id           = clientId.EscapeClientId(),
                        TimeReceived = timeReceived
                    };

                    redisClient.As <GatewayMessage>().SetValue(EndpointName + gatewayMessage.Id, gatewayMessage, TimeSpan.FromMinutes(DefaultEntityTtl));
                    Logger.InfoFormat("DeduplicatedMessage added gatewayMessage {0} with ttl {1}", gatewayMessage.Id, DefaultEntityTtl);
                }
                return(true);
            }
            catch (Exception e)
            {
                Logger.Error(string.Format("ERROR DeduplicateMessage {0}", clientId), e);
                throw;
            }
        }
        public bool InsertMessage(string clientId, DateTime timeReceived, Stream messageStream, IDictionary <string, string> headers)
        {
            try
            {
                var gatewayMessage = new GatewayMessage
                {
                    Id              = clientId.EscapeClientId(),
                    TimeReceived    = timeReceived,
                    Headers         = headers,
                    OriginalMessage = new byte[messageStream.Length],
                    Acknowledged    = false
                };

                messageStream.Read(gatewayMessage.OriginalMessage, 0, (int)messageStream.Length);
                using (var redisClient = RedisClientsManager.GetClient())
                {
                    redisClient.As <GatewayMessage>().SetValue(EndpointName + gatewayMessage.Id, gatewayMessage, TimeSpan.FromMinutes(DefaultEntityTtl));
                    Logger.InfoFormat("Added gatewayMessage {0} with ttl {1}", gatewayMessage.Id, DefaultEntityTtl);
                }
                return(true);
            }
            catch (Exception e)
            {
                Logger.Error(string.Format("ERROR InsertMessage {0}", clientId), e);
                throw;
            }
        }