Exemple #1
0
        async Task InnerSend(string destinationAddress, TransportMessage message, ConnectionWrapper connection)
        {
            using (var command = connection.Connection.CreateCommand())
            {
                command.CommandText = "PKG_REBUS.P_Enqueue_Rebus_Msg";

                command.CommandType = CommandType.StoredProcedure;

                var headers = message.Headers.Clone();

                var priority       = GetMessagePriority(headers);
                var delay          = GetDelayInSeconds(headers);
                var expiration     = GetExpirationInSeconds(headers);
                var headers_keys   = headers.Select(h => h.Key).ToArray();
                var headers_values = headers.Select(h => h.Value).ToArray();

                command.BindByName = true;

                command.Parameters.Add(new OracleParameter("p_Queue_Name", OracleDbType.Varchar2, destinationAddress, ParameterDirection.Input));
                command.Parameters.Add(new OracleParameter("p_EO_Visibility", OracleDbType.Byte, GetVisibility(_options.EnqueueOptions.Visibility), ParameterDirection.Input));
                command.Parameters.Add(new OracleParameter("p_EO_Transformation", OracleDbType.Varchar2, _options.EnqueueOptions.Tranformation, ParameterDirection.Input));
                command.Parameters.Add(new OracleParameter("p_EO_Delivery_Mode", OracleDbType.Byte, GetEnqueueDeliveryMode(_options.EnqueueOptions.DeliveryMode), ParameterDirection.Input));
                command.Parameters.Add(new OracleParameter("p_MP_Priority", OracleDbType.Int32, priority, ParameterDirection.Input));
                command.Parameters.Add(new OracleParameter("p_MP_Delay", OracleDbType.Int32, delay, ParameterDirection.Input));
                command.Parameters.Add(new OracleParameter("p_MP_Expiration", OracleDbType.Int32, expiration, ParameterDirection.Input));

                bool storeBodyInRaw = message.Body.Length <= 2000 && !_options.ForceBlobStore;

                var headerKeysParam = command.Parameters.Add(new OracleParameter("p_Headers_Keys", OracleDbType.Varchar2));
                headerKeysParam.Direction       = System.Data.ParameterDirection.Input;
                headerKeysParam.CollectionType  = OracleCollectionType.PLSQLAssociativeArray;
                headerKeysParam.Value           = headers_keys;
                headerKeysParam.Size            = headers_keys.Count();
                headerKeysParam.ArrayBindSize   = headers_keys.Select(key => key.Length).ToArray();
                headerKeysParam.ArrayBindStatus = Enumerable.Repeat(OracleParameterStatus.Success, headers_keys.Count()).ToArray();

                var headerValuesParam = command.Parameters.Add(new OracleParameter("p_Headers_Values", OracleDbType.Varchar2));
                headerValuesParam.Direction       = System.Data.ParameterDirection.Input;
                headerValuesParam.CollectionType  = OracleCollectionType.PLSQLAssociativeArray;
                headerValuesParam.Value           = headers_values;
                headerValuesParam.Size            = headers_values.Count();
                headerValuesParam.ArrayBindSize   = headers_values.Select(key => key.Length).ToArray();
                headerValuesParam.ArrayBindStatus = Enumerable.Repeat(OracleParameterStatus.Success, headers_values.Count()).ToArray();


                command.Parameters.Add(new OracleParameter("p_Body_Raw", OracleDbType.Raw, storeBodyInRaw ? message.Body : null, ParameterDirection.Input));
                command.Parameters.Add(new OracleParameter("p_Body_Blob", OracleDbType.Blob, !storeBodyInRaw ? message.Body : null, ParameterDirection.Input));

                await command.ExecuteNonQueryAsync();

                headerKeysParam.Dispose();
                headerValuesParam.Dispose();
            }
        }
Exemple #2
0
 Task <ConnectionWrapper> GetConnection(ITransactionContext context)
 {
     return(context
            .GetOrAdd(CurrentConnectionKey,
                      async() =>
     {
         var dbConnection = await _connectionHelper.GetConnection();
         var connectionWrapper = new ConnectionWrapper(dbConnection);
         context.OnCommitted(() =>
         {
             dbConnection.Complete();
             return Task.FromResult(0);
         });
         context.OnDisposed(() => connectionWrapper.Dispose());
         return connectionWrapper;
     }));
 }
Exemple #3
0
 ConnectionWrapper GetConnection(ITransactionContext context)
 {
     return(context
            .GetOrAdd(CurrentConnectionKey,
                      () =>
     {
         var dbConnection = _connectionHelper.GetConnection();
         var connectionWrapper = new ConnectionWrapper(dbConnection);
         context.OnCommitted(() =>
         {
             dbConnection.Complete();
             return Task.CompletedTask;
         });
         context.OnDisposed(() => connectionWrapper.Dispose());
         return connectionWrapper;
     }));
 }
Exemple #4
0
        void InnerSend(string destinationAddress, TransportMessage message, ConnectionWrapper connection)
        {
            using (var command = connection.Connection.CreateCommand())
            {
                command.CommandText = $@"
                    INSERT INTO {_table}
                    (
                        recipient,
                        headers,
                        body,
                        priority,
                        visible,
                        expiration
                    )
                    VALUES
                    (
                        :recipient,
                        :headers,
                        :body,
                        :priority,
                        :now + :visible,
                        :now + :ttlseconds
                    )";

                var headers = message.Headers.Clone();

                var priority = GetMessagePriority(headers);
                var initialVisibilityDelay = new TimeSpan(0, 0, 0, GetInitialVisibilityDelay(headers));
                var ttlSeconds             = new TimeSpan(0, 0, 0, GetTtlSeconds(headers));

                // must be last because the other functions on the headers might change them
                var serializedHeaders = HeaderSerializer.Serialize(headers);

                command.BindByName = true;
                command.Parameters.Add(new OracleParameter("recipient", OracleDbType.Varchar2, destinationAddress, ParameterDirection.Input));
                command.Parameters.Add(new OracleParameter("headers", OracleDbType.Blob, serializedHeaders, ParameterDirection.Input));
                command.Parameters.Add(new OracleParameter("body", OracleDbType.Blob, message.Body, ParameterDirection.Input));
                command.Parameters.Add(new OracleParameter("priority", OracleDbType.Int32, priority, ParameterDirection.Input));
                command.Parameters.Add(new OracleParameter("visible", OracleDbType.IntervalDS, initialVisibilityDelay, ParameterDirection.Input));
                command.Parameters.Add(new OracleParameter("now", _rebusTime.Now.ToOracleTimeStamp()));
                command.Parameters.Add(new OracleParameter("ttlseconds", OracleDbType.IntervalDS, ttlSeconds, ParameterDirection.Input));

                command.ExecuteNonQuery();
            }
        }