Exemplo n.º 1
0
        /// <summary>
        /// Handles the specified query.
        /// </summary>
        /// <param name="query">The query.</param>
        /// <returns></returns>
        public IReceivedMessageInternal Handle(ReceiveMessageQuery <IDbConnection, IDbTransaction> query)
        {
            if (!_databaseExists.Exists(_connectionInformation.ConnectionString))
            {
                return(null);
            }

            using (var connection = _dbFactory.CreateConnection(_connectionInformation.ConnectionString, false))
            {
                connection.Open();
                using (var transaction = _dbFactory.CreateTransaction(connection).BeginTransaction())
                {
                    using (var selectCommand = connection.CreateCommand())
                    {
                        selectCommand.Transaction = transaction;
                        CommandString commandString =
                            GetDeQueueCommand(_tableNameHelper.MetaDataName, _tableNameHelper.QueueName,
                                              _tableNameHelper.StatusName, query.Routes);

                        _buildDequeueCommand.BuildCommand(selectCommand, commandString, _options.Value, query.Routes);
                        using (var reader = selectCommand.ExecuteReader())
                        {
                            return(_messageDeQueue.HandleMessage(connection, transaction, reader, commandString));
                        }
                    }
                }
            }
        }
 public void BuildCommand(SqlCommand selectCommand, ReceiveMessageQuery query)
 {
     selectCommand.Transaction = query.Transaction;
     if (query.MessageId != null && query.MessageId.HasValue)
     {
         selectCommand.CommandText =
              _createDequeueStatement.GetDeQueueCommand(true, query.Routes);
         selectCommand.Parameters.Add("@QueueID", SqlDbType.BigInt);
         selectCommand.Parameters["@QueueID"].Value = query.MessageId.Id.Value;
     }
     else
     {
         selectCommand.CommandText =
              _createDequeueStatement.GetDeQueueCommand(false, query.Routes);
     }
     if (_options.Value.EnableRoute && query.Routes != null && query.Routes.Count > 0)
     {
         var routeCounter = 1;
         foreach (var route in query.Routes)
         {
             selectCommand.Parameters.Add("@Route" + routeCounter.ToString(), SqlDbType.VarChar);
             selectCommand.Parameters["@Route" + routeCounter.ToString()].Value = route;
             routeCounter++;
         }
     }
 }
Exemplo n.º 3
0
        public void Create_Default()
        {
            var context = Substitute.For <IMessageContext>();
            var test    = new ReceiveMessageQuery(context);

            Assert.Equal(context, test.MessageContext);
        }
 public void Create_Null_Routes_Ok()
 {
     var fixture = new Fixture().Customize(new AutoNSubstituteCustomization());
     var messageid = fixture.Create<IMessageId>();
     var test = new ReceiveMessageQuery(messageid, null);
     Assert.NotNull(test.MessageId);
 }
 public void Create_Default()
 {
     var context = Substitute.For<IMessageContext>();
     var id = Substitute.For<IMessageId>();
     var test = new ReceiveMessageQuery(context,id);
     Assert.Equal(id, test.MessageId);
     Assert.Equal(context, test.MessageContext);
 }
 public void Create_Null_Transaction_Ok()
 {
     using (var conn = new SqlConnection())
     {
         var test = new ReceiveMessageQuery(conn, null, null, null);
         Assert.NotNull(test.Connection);
         Assert.Null(test.Transaction);
     }
 }
Exemplo n.º 7
0
 /// <summary>
 /// Handles the specified query.
 /// </summary>
 /// <param name="query">The query.</param>
 /// <returns></returns>
 public IReceivedMessageInternal Handle(ReceiveMessageQuery <SqlConnection, SqlTransaction> query)
 {
     using (var selectCommand = query.Connection.CreateCommand())
     {
         _buildDequeueCommand.BuildCommand(selectCommand, query);
         using (var reader = selectCommand.ExecuteReader())
         {
             return(_readMessage.Read(reader));
         }
     }
 }
Exemplo n.º 8
0
 public void BuildCommand(SqlCommand selectCommand, ReceiveMessageQuery <SqlConnection, SqlTransaction> query)
 {
     BuildCommandInternal(selectCommand, query.Transaction, query.Routes);
 }
        /// <inheritdoc />
        public IReceivedMessageInternal Handle(ReceiveMessageQuery <NpgsqlConnection, NpgsqlTransaction> query)
        {
            using (var selectCommand = query.Connection.CreateCommand())
            {
                selectCommand.Transaction = query.Transaction;
                selectCommand.CommandText =
                    ReceiveMessage.GetDeQueueCommand(_commandCache, _tableNameHelper, _options.Value,
                                                     query.Routes);

                selectCommand.Parameters.Add("@CurrentDate", NpgsqlDbType.Bigint);
                selectCommand.Parameters["@CurrentDate"].Value = _getTime.GetCurrentUtcDate().Ticks;

                if (_options.Value.EnableRoute && query.Routes != null && query.Routes.Count > 0)
                {
                    var routeCounter = 1;
                    foreach (var route in query.Routes)
                    {
                        selectCommand.Parameters.Add("@Route" + routeCounter, NpgsqlDbType.Varchar);
                        selectCommand.Parameters["@Route" + routeCounter].Value = route;
                        routeCounter++;
                    }
                }

                using (var reader = selectCommand.ExecuteReader())
                {
                    if (!reader.Read())
                    {
                        return(null);
                    }

                    //load up the message from the DB
                    long   id             = 0;
                    var    correlationId  = Guid.Empty;
                    byte[] headerPayload  = null;
                    byte[] messagePayload = null;
                    try
                    {
                        id             = (long)reader["queueid"];
                        correlationId  = (Guid)reader["CorrelationID"];
                        headerPayload  = (byte[])reader["Headers"];
                        messagePayload = (byte[])reader["body"];

                        var headers =
                            _serialization.InternalSerializer
                            .ConvertBytesTo <IDictionary <string, object> >(headerPayload);
                        var messageGraph =
                            (MessageInterceptorsGraph)headers[_headers.StandardHeaders.MessageInterceptorGraph.Name];
                        var message = _serialization.Serializer
                                      .BytesToMessage <MessageBody>(messagePayload, messageGraph, headers).Body;
                        var newMessage = _messageFactory.Create(message, headers);

                        return(_receivedMessageFactory.Create(newMessage,
                                                              new MessageQueueId <long>(id),
                                                              new MessageCorrelationId <Guid>(correlationId)));
                    }
                    catch (Exception error)
                    {
                        //at this point, the record has been de-queued, but it can't be processed.
                        throw new PoisonMessageException(
                                  "An error has occurred trying to re-assemble a message de-queued from the server ", error,
                                  new MessageQueueId <long>(id), new MessageCorrelationId <Guid>(correlationId), messagePayload,
                                  headerPayload);
                    }
                }
            }
        }
 public void Create_Null_MessageID_Ok()
 {
     var test = new ReceiveMessageQuery(null, new List<string>());
     Assert.Null(test.MessageId);
 }
 public void Create_Null_Constructor_Ok_For_ID()
 {
     var test = new ReceiveMessageQuery(Substitute.For<IMessageContext>(), null);
     Assert.Null(test.MessageId);
 }
Exemplo n.º 12
0
 public async Task <IEnumerable <Message> > Handle(ReceiveMessageQuery query) => await query.Execute(_awsSqsClient);
        public void Create_Null_Constructor_Ok_For_ID()
        {
            var test = new ReceiveMessageQuery(Substitute.For <IMessageContext>(), null);

            Assert.Null(test.MessageId);
        }