public ReceivedMessage GetMessage() { using (_databaseContextFactory.Create(_connectionName)) { var row = _databaseGateway.GetSingleRowUsing( RawQuery.Create(_scriptProvider.Get(Script.QueueDequeue, _tableName)) .AddParameterValue(QueueColumns.MachineName, _machineName) .AddParameterValue(QueueColumns.QueueName, _tableName) .AddParameterValue(QueueColumns.UnacknowledgedHash, _unacknowledgedHash) .AddParameterValue(QueueColumns.UnacknowledgedId, Guid.NewGuid())); if (row == null) { return(null); } var result = new MemoryStream((byte[])row["MessageBody"]); return(new ReceivedMessage(result, QueueColumns.SequenceId.MapFrom(row))); } }
public IQuery RemoveSnapshot(Guid id) { return(new RawQuery(_scriptProvider.Get("EventStore.RemoveSnapshot")).AddParameterValue(EventStoreColumns.Id, id)); }
public SubscriptionManager(IServiceBusEvents events, IServiceBusConfiguration serviceBusConfiguration, ISubscriptionConfiguration configuration, IScriptProvider scriptProvider, IDatabaseContextFactory databaseContextFactory, IDatabaseGateway databaseGateway) { Guard.AgainstNull(events, "events"); Guard.AgainstNull(serviceBusConfiguration, "serviceBusConfiguration"); Guard.AgainstNull(configuration, "configuration"); Guard.AgainstNull(scriptProvider, "scriptProvider"); Guard.AgainstNull(databaseContextFactory, "databaseContextFactory"); Guard.AgainstNull(databaseGateway, "databaseGateway"); _log = Log.For(this); _serviceBusConfiguration = serviceBusConfiguration; _configuration = configuration; _scriptProvider = scriptProvider; _databaseContextFactory = databaseContextFactory; _databaseGateway = databaseGateway; events.Started += ServiceBus_Started; _subscriptionProviderName = configuration.ProviderName; if (string.IsNullOrEmpty(_subscriptionProviderName)) { throw new ConfigurationErrorsException(string.Format(SubscriptionResources.ProviderNameEmpty, "SubscriptionManager")); } _subscriptionConnectionString = configuration.ConnectionString; if (string.IsNullOrEmpty(_subscriptionConnectionString)) { throw new ConfigurationErrorsException(string.Format(SubscriptionResources.ConnectionStringEmpty, "SubscriptionManager")); } using (_databaseContextFactory.Create(_subscriptionProviderName, _subscriptionConnectionString)) { if (_databaseGateway.GetScalarUsing <int>( RawQuery.Create( _scriptProvider.Get( Script.SubscriptionManagerExists))) != 1) { try { _databaseGateway.ExecuteUsing(RawQuery.Create( _scriptProvider.Get( Script.SubscriptionManagerCreate))); } catch (Exception ex) { if ( !ex.Message.Equals( "There is already an object named 'SubscriberMessageType' in the database.", StringComparison.OrdinalIgnoreCase)) { throw new DataException(SubscriptionResources.SubscriptionManagerCreateException, ex); } } } } }
public void Subscribe(IEnumerable <string> messageTypeFullNames) { Guard.AgainstNull(messageTypeFullNames, "messageTypeFullNames"); if (_deferSubscribtions) { _deferredSubscriptions.AddRange(messageTypeFullNames); return; } if (_serviceBusConfiguration.IsWorker || _configuration.Subscribe == SubscribeOption.Ignore) { return; } if (!_serviceBusConfiguration.HasInbox || _serviceBusConfiguration.Inbox.WorkQueue == null) { throw new InvalidOperationException(EsbResources.SubscribeWithNoInboxException); } var missingMessageTypes = new List <string>(); using (_databaseContextFactory.Create(_subscriptionProviderName, _subscriptionConnectionString)) { foreach (var messageType in messageTypeFullNames) { if (_configuration.Subscribe == SubscribeOption.Normal) { _databaseGateway.ExecuteUsing( RawQuery.Create( _scriptProvider.Get(Script.SubscriptionManagerSubscribe)) .AddParameterValue(SubscriptionManagerColumns.InboxWorkQueueUri, _serviceBusConfiguration.Inbox.WorkQueue.Uri.ToString()) .AddParameterValue(SubscriptionManagerColumns.MessageType, messageType)); } else { if (_databaseGateway.GetScalarUsing <int>( RawQuery.Create( _scriptProvider.Get(Script.SubscriptionManagerContains)) .AddParameterValue(SubscriptionManagerColumns.InboxWorkQueueUri, _serviceBusConfiguration.Inbox.WorkQueue.Uri.ToString()) .AddParameterValue(SubscriptionManagerColumns.MessageType, messageType)) == 0) { missingMessageTypes.Add(messageType); } } } } if (!missingMessageTypes.Any()) { return; } foreach (var messageType in missingMessageTypes) { _log.Error(string.Format(SubscriptionResources.MissingSubscription, messageType)); } throw new ApplicationException(string.Format(SubscriptionResources.MissingSubscriptionException, string.Join(",", missingMessageTypes))); }
public IQuery SetSequenceNumber(string name, long sequenceNumber) { return(RawQuery.Create(_scriptProvider.Get("Projection.SetSequenceNumber")) .AddParameterValue(Columns.Name, name) .AddParameterValue(Columns.SequenceNumber, sequenceNumber)); }
public ProcessingStatus ProcessingStatus(TransportMessage transportMessage) { try { using ( var connection = _databaseContextFactory.Create(_idempotenceProviderName, _idempotenceConnectionString)) using (var transaction = connection.BeginTransaction()) { try { if (_databaseGateway.GetScalarUsing <int>( RawQuery.Create( _scriptProvider.Get( Script.IdempotenceHasCompleted)) .AddParameterValue(IdempotenceColumns.MessageId, transportMessage.MessageId)) == 1) { return(Esb.ProcessingStatus.Ignore); } if (_databaseGateway.GetScalarUsing <int>( RawQuery.Create( _scriptProvider.Get( Script.IdempotenceIsProcessing)) .AddParameterValue(IdempotenceColumns.MessageId, transportMessage.MessageId)) == 1) { return(Esb.ProcessingStatus.Ignore); } _databaseGateway.ExecuteUsing( RawQuery.Create( _scriptProvider.Get( 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.Get( Script.IdempotenceIsMessageHandled)) .AddParameterValue(IdempotenceColumns.MessageId, transportMessage.MessageId)) == 1; return(messageHandled ? Esb.ProcessingStatus.MessageHandled : Esb.ProcessingStatus.Assigned); } finally { transaction.CommitTransaction(); } } } catch (Exception 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; } }
public IdempotenceService( IServiceBusConfiguration serviceBusConfiguration, IIdempotenceConfiguration idempotenceConfiguration, IScriptProvider scriptProvider, IDatabaseContextFactory databaseContextFactory, IDatabaseGateway databaseGateway) { Guard.AgainstNull(serviceBusConfiguration, "serviceBusConfiguration"); Guard.AgainstNull(idempotenceConfiguration, "idempotenceConfiguration"); Guard.AgainstNull(scriptProvider, "scriptProvider"); Guard.AgainstNull(databaseContextFactory, "databaseContextFactory"); Guard.AgainstNull(databaseGateway, "databaseGateway"); if (!serviceBusConfiguration.HasInbox) { throw new InvalidOperationException(Resources.NoInboxException); } _scriptProvider = scriptProvider; _databaseContextFactory = databaseContextFactory; _databaseGateway = databaseGateway; _idempotenceProviderName = idempotenceConfiguration.ProviderName; if (string.IsNullOrEmpty(_idempotenceProviderName)) { throw new ApplicationException(string.Format(Resources.ProviderNameEmpty, "IdempotenceService")); } _idempotenceConnectionString = idempotenceConfiguration.ConnectionString; if (string.IsNullOrEmpty(_idempotenceConnectionString)) { throw new ApplicationException(string.Format(Resources.ConnectionStringEmpty, "IdempotenceService")); } Guard.AgainstNull(idempotenceConfiguration, "configuration"); using ( var connection = _databaseContextFactory.Create(_idempotenceProviderName, _idempotenceConnectionString)) using (var transaction = connection.BeginTransaction()) { if (_databaseGateway.GetScalarUsing <int>( RawQuery.Create( _scriptProvider.Get( Script.IdempotenceServiceExists))) != 1) { throw new InvalidOperationException(Resources.IdempotenceDatabaseNotConfigured); } _databaseGateway.ExecuteUsing( RawQuery.Create( _scriptProvider.Get( Script.IdempotenceInitialize)) .AddParameterValue(IdempotenceColumns.InboxWorkQueueUri, serviceBusConfiguration.Inbox.WorkQueueUri)); transaction.CommitTransaction(); } }
public IQuery Get(string key) { return(RawQuery.Create(_scriptProvider.Get("KeyStore.Get")) .AddParameterValue(Columns.Key, key)); }
public IQuery GetSequenceNumber(string name) { return(RawQuery.Create(_scriptProvider.Get("Projection.GetSequenceNumber")) .AddParameterValue(ProjectionPositionColumns.Name, name)); }
public IQuery GetId(string typeName) { return(new RawQuery(_scriptProvider.Get("EventTypeStore.GetId")).AddParameterValue(Columns.TypeName, typeName)); }