public void Initialize(IServiceBus bus) { _serviceBusConfiguration = bus.Configuration; using (_databaseContextFactory.Create(SqlServerConfiguration.ProviderName, _subscriptionConnectionString)) { if (_databaseGateway.GetScalarUsing <int>( RawQuery.Create( _scriptProvider.GetScript( Script.SubscriptionManagerExists))) != 1) { try { _databaseGateway.ExecuteUsing(RawQuery.Create( _scriptProvider.GetScript( Script.SubscriptionManagerCreate))); } catch (Exception ex) { if (!ex.Message.Equals("There is already an object named 'SubscriberMessageType' in the database.", StringComparison.OrdinalIgnoreCase)) { throw new DataException(SqlResources.SubscriptionManagerCreateException, ex); } } } } if (HasDeferredSubscriptions) { Subscribe(_deferredSubscriptions); } }
public bool Contains(TransportMessage transportMessage) { using (databaseConnectionFactory.Create(IdempotenceDataSource)) { return(databaseGateway.GetScalarUsing <int>( IdempotenceDataSource, RawQuery.CreateFrom( scriptProvider.GetScript( Script.IdempotenceTrackerContains)) .AddParameterValue(IdempotenceTrackerColumns.MessageId, transportMessage.MessageId)) == 1); } }
private void BuildQueries() { existsQuery = RawQuery.CreateFrom(scriptProvider.GetScript(Script.QueueExists, tableName)); createQuery = RawQuery.CreateFrom(scriptProvider.GetScript(Script.QueueCreate, tableName)); dropQuery = RawQuery.CreateFrom(scriptProvider.GetScript(Script.QueueDrop, tableName)); purgeQuery = RawQuery.CreateFrom(scriptProvider.GetScript(Script.QueuePurge, tableName)); dequeueQuery = RawQuery.CreateFrom(scriptProvider.GetScript(Script.QueueDequeue, tableName)); countQuery = RawQuery.CreateFrom(scriptProvider.GetScript(Script.QueueCount, tableName)); enqueueQueryStatement = scriptProvider.GetScript(Script.QueueEnqueue, tableName); removeQueryStatement = scriptProvider.GetScript(Script.QueueRemove, tableName); dequeueIdQueryStatement = scriptProvider.GetScript(Script.QueueDequeueId, tableName); }
public void Initialize(IServiceBus bus) { _serviceBusConfiguration = bus.Configuration; using (_databaseContextFactory.Create(SqlServerConfiguration.ProviderName, _subscriptionConnectionString)) { if (_databaseGateway.GetScalarUsing <int>( RawQuery.Create( _scriptProvider.GetScript( Script.SubscriptionManagerExists))) != 1) { throw new SubscriptionManagerException(SqlResources.SubscriptionManagerDatabaseNotConfigured); } } if (HasDeferredSubscriptions) { Subscribe(_deferredSubscriptions); } }
public void Initialize(IServiceBus bus) { serviceBusConfiguration = bus.Configuration; using (databaseConnectionFactory.Create(_subscriptionDataSource)) { if (databaseGateway.GetScalarUsing <int>( _subscriptionDataSource, RawQuery.Create( scriptProvider.GetScript( Script.SubscriptionManagerExists))) != 1) { throw new SubscriptionManagerException(SqlResources.SubscriptionManagerDatabaseNotConfigured); } } if (HasDeferredSubscriptions) { Subscribe(deferredSubscriptions); } }
public ReceivedMessage GetMessage() { lock (_padlock) { try { using (_databaseConnectionFactory.Create(_dataSource)) { var messageIds = _unacknowledgedMessages.Count > 0 ? _unacknowledgedMessages.Select(unacknowledgedMessage => unacknowledgedMessage.MessageId) : _emptyMessageIds; var row = _databaseGateway.GetSingleRowUsing( _dataSource, RawQuery.Create( _scriptProvider.GetScript( Script.QueueDequeue, _tableName, string.Join(",", messageIds.Select(id => string.Format("'{0}'", id)).ToArray())))); if (row == null) { return(null); } var result = new MemoryStream((byte[])row["MessageBody"]); var messageId = new Guid(row["MessageId"].ToString()); MessageIdAcknowledgementRequired((int)row["SequenceId"], messageId); return(new ReceivedMessage(result, messageId)); } } catch (Exception ex) { _log.Error(string.Format(SqlResources.DequeueError, Uri, ex.Message, _createQuery)); throw; } } }
public void Initialize(IServiceBus bus) { using (var connection = _databaseConnectionFactory.Create(_idempotenceDataSource)) using (var transaction = connection.BeginTransaction()) { if (_databaseGateway.GetScalarUsing <int>( _idempotenceDataSource, RawQuery.Create( _scriptProvider.GetScript( Script.IdempotenceServiceExists))) != 1) { throw new IdempotenceServiceException(SqlResources.IdempotenceDatabaseNotConfigured); } _databaseGateway.ExecuteUsing( _idempotenceDataSource, RawQuery.Create( _scriptProvider.GetScript( Script.IdempotenceInitialize)) .AddParameterValue(IdempotenceColumns.InboxWorkQueueUri, bus.Configuration.Inbox.WorkQueue.Uri.ToString())); transaction.CommitTransaction(); } }
public ProcessingStatus ProcessingStatus(TransportMessage transportMessage) { try { using ( var connection = _databaseContextFactory.Create(SqlServerConfiguration.ProviderName, _idempotenceConnectionString)) using (var transaction = connection.BeginTransaction()) { try { if (_databaseGateway.GetScalarUsing <int>( RawQuery.Create( _scriptProvider.GetScript( Script.IdempotenceHasCompleted)) .AddParameterValue(IdempotenceColumns.MessageId, transportMessage.MessageId)) == 1) { return(Esb.ProcessingStatus.Ignore); } if (_databaseGateway.GetScalarUsing <int>( RawQuery.Create( _scriptProvider.GetScript( Script.IdempotenceIsProcessing)) .AddParameterValue(IdempotenceColumns.MessageId, transportMessage.MessageId)) == 1) { return(Esb.ProcessingStatus.Ignore); } _databaseGateway.ExecuteUsing( RawQuery.Create( _scriptProvider.GetScript( Script.IdempotenceProcessing)) .AddParameterValue(IdempotenceColumns.MessageId, transportMessage.MessageId) .AddParameterValue(IdempotenceColumns.InboxWorkQueueUri, transportMessage.RecipientInboxWorkQueueUri) .AddParameterValue(IdempotenceColumns.AssignedThreadId, Thread.CurrentThread.ManagedThreadId)); var messageHandled = _databaseGateway.GetScalarUsing <int>( RawQuery.Create( _scriptProvider.GetScript( Script.IdempotenceIsMessageHandled)) .AddParameterValue(IdempotenceColumns.MessageId, transportMessage.MessageId)) == 1; return(messageHandled ? Esb.ProcessingStatus.MessageHandled : Esb.ProcessingStatus.Assigned); } finally { transaction.CommitTransaction(); } } } catch (SqlException ex) { var message = ex.Message.ToUpperInvariant(); if (message.Contains("VIOLATION OF UNIQUE KEY CONSTRAINT") || message.Contains("CANNOT INSERT DUPLICATE KEY") || message.Contains("IGNORE MESSAGE PROCESSING")) { return(Esb.ProcessingStatus.Ignore); } throw; } }