Ejemplo n.º 1
0
        public void Send(IMessage msg, MessageQueueTransactionType transactionType)
        {
            switch (transactionType)
            {
            case MessageQueueTransactionType.Single:
                using (IMessageQueueTransaction tx = provider.CreateMessageQueueTransaction())
                {
                    try
                    {
                        Send(msg, tx);
                        tx.Commit();
                    }
                    catch (Exception e)
                    {
                        tx.Abort();
                        throw new MonoMessagingException(e.Message, e);
                    }
                }
                break;

            case MessageQueueTransactionType.None:
                Send(msg);
                break;

            case MessageQueueTransactionType.Automatic:
                throw new NotSupportedException("Automatic transaction types not supported");
            }
        }
Ejemplo n.º 2
0
        private IMessage DoReceive(IMessageQueueTransaction transaction,
                                   TimeSpan timeout, IsMatch matcher, bool ack)
        {
            RabbitMQMessageQueueTransaction tx = (RabbitMQMessageQueueTransaction)transaction;

            return(DoReceive((IMessagingContext)tx, timeout, matcher, ack));
        }
Ejemplo n.º 3
0
		private IMessage Run (IMessageQueueTransaction transaction, 
		                      RecieveDelegate r)
		{
			TxReceiver txr = new TxReceiver (this, r);
			RabbitMQMessageQueueTransaction tx = 
				(RabbitMQMessageQueueTransaction) transaction;
			return tx.RunReceive (txr.ReceiveInContext);			
		}
Ejemplo n.º 4
0
 public EventPublisher(IServiceProvider serviceProvider)
 {
     _serviceProvider            = serviceProvider;
     _identityGenerator          = serviceProvider.GetRequiredService <IIdentityGenerator>();
     _publishedEventPersistenter = serviceProvider.GetRequiredService <IPublishedEventPersistenter>();
     _messageQueueTransaction    = serviceProvider.GetRequiredService <IMessageQueueTransaction>();
     _messageSerializer          = serviceProvider.GetRequiredService <IMessageSerializer>();
     _logger    = serviceProvider.GetRequiredService <ILoggerFactory>().CreateLogger <EventPublisher>();
     TransactID = _identityGenerator.NextIdentity();
 }
Ejemplo n.º 5
0
		public void Send (IMessage msg, IMessageQueueTransaction transaction)
		{
			if (QRef == QueueReference.DEFAULT)
				throw new MonoMessagingException ("Path has not been specified");
			
			if (msg.BodyStream == null)
				throw new ArgumentException ("Message is not serialized properly");
			
			RabbitMQMessageQueueTransaction tx = (RabbitMQMessageQueueTransaction) transaction;
			
			tx.RunSend (SendInContext, msg);
		}
Ejemplo n.º 6
0
        public void Send(IMessage msg, IMessageQueueTransaction transaction)
        {
            if (QRef == QueueReference.DEFAULT)
            {
                throw new MonoMessagingException("Path has not been specified");
            }

            if (msg.BodyStream == null)
            {
                throw new ArgumentException("Message is not serialized properly");
            }

            RabbitMQMessageQueueTransaction tx = (RabbitMQMessageQueueTransaction)transaction;

            SetDeliveryInfo(msg, tx.Id);
            tx.Send(QRef, msg);
        }
Ejemplo n.º 7
0
        private void SendMessage <T>(T message, IMessageQueueTransaction messageQueueTransaction)
        {
            var jsonSerializerSettings = new JsonSerializerSettings {
                TypeNameHandling = TypeNameHandling.All
            };

            var queueMessage = new QueueMessage {
                MessageBody = message.SerializeToJson(jsonSerializerSettings), MessageType = typeof(T)
            };

            using (var memoryStream = new MemoryStream(Encoding.UTF8.GetBytes(queueMessage.SerializeToJson(jsonSerializerSettings))))
            {
                var buffer         = new byte[MaxMsmqMessageSize];
                var correlationId  = "";
                var messageSize    = memoryStream.Length;
                var numberOfChunks = Convert.ToInt32(Math.Ceiling((double)messageSize / buffer.Length));
                int bytes;
                var chunk = 0;

                Logger.Debug("Message send {QueueName} {Type} {%Message}", Name, queueMessage.MessageType.FullName, queueMessage.MessageBody);

                if (!Transactional && numberOfChunks > 1)
                {
                    throw new MessageSizeException(memoryStream.Length, buffer.Length, Transactional);
                }

                while ((bytes = memoryStream.Read(buffer, 0, buffer.Length)) > 0)
                {
                    var mqMessage = new Message
                    {
                        AppSpecific   = numberOfChunks,
                        CorrelationId = correlationId
                    };

                    mqMessage.BodyStream.Write(buffer, 0, bytes);

                    Logger.Debug("Sending message chunk ({Chunk}/{NumberOfChunks}) on {QueueName} {CorrelationId}", ++chunk, numberOfChunks, Name, correlationId);

                    MessageQueueManager.Send(MessageQueue, mqMessage, messageQueueTransaction?.Transaction);

                    correlationId = mqMessage.Id;
                }
            }
        }
Ejemplo n.º 8
0
        private ITransactionalMessage CreateTransactionalMessage(Stream stream, IMessageQueueTransaction messageQueueTransaction)
        {
            stream.Position = 0;

            using (var streamReader = new StreamReader(stream, Encoding.UTF8))
            {
                var queueMessage = streamReader.ReadToEnd().DeserializeFromJson <QueueMessage>();

                if (queueMessage != null)
                {
                    Logger.Debug("Message received {QueueName} {Type} {%Message}", Name, queueMessage?.MessageType?.FullName, queueMessage?.MessageBody);
                }

                if (queueMessage == null)
                {
                    messageQueueTransaction?.Commit();
                    messageQueueTransaction?.Dispose();
                    messageQueueTransaction = null;
                }

                return(new TransactionalMessage(queueMessage, messageQueueTransaction));
            }
        }
Ejemplo n.º 9
0
		public IMessage Receive (TimeSpan timeout,
		                         IMessageQueueTransaction transaction)
		{
			return Run (transaction, Receiver (timeout));
		}
		public IMessage RemoveCurrent (TimeSpan timeout, IMessageQueueTransaction transaction)
		{
			throw new NotImplementedException ();
		}
Ejemplo n.º 11
0
		private IMessage DoReceive (IMessageQueueTransaction transaction,
									TimeSpan timeout, IsMatch matcher, bool ack)
		{
			RabbitMQMessageQueueTransaction tx = (RabbitMQMessageQueueTransaction) transaction;
			return DoReceive ((IMessagingContext) tx, timeout, matcher, ack);
		}
Ejemplo n.º 12
0
		public IMessage ReceiveByCorrelationId (string id, TimeSpan timeout,
		                                        IMessageQueueTransaction transaction)
		{
			return DoReceive (transaction, timeout, ByCorrelationId (id), true);
		}
Ejemplo n.º 13
0
		public IMessage ReceiveByCorrelationId (string id,
		                                        IMessageQueueTransaction transaction)
		{
			return DoReceive (transaction, noTime, ByCorrelationId (id), true);
		}
Ejemplo n.º 14
0
 public IMessage ReceiveByCorrelationId(string id,
                                        IMessageQueueTransaction transaction)
 {
     return(DoReceive(transaction, noTime, ByCorrelationId(id), true));
 }
Ejemplo n.º 15
0
		public IMessage ReceiveByCorrelationId (string id, TimeSpan timeout,
		                                        IMessageQueueTransaction transaction)
		{
			return Run (transaction, Receiver (timeout, ByCorrelationId (id)));
		}
Ejemplo n.º 16
0
		public IMessage RemoveCurrent (TimeSpan timeout, IMessageQueueTransaction transaction)
		{
			throw new NotSupportedException ("Unable to remove messages within a transaction");
		}
Ejemplo n.º 17
0
 internal MessageQueueTransaction(IMessageQueueTransaction delegateTx)
 {
     this.delegateTx = delegateTx;
 }
 public IMessage RemoveCurrent(IMessageQueueTransaction transaction)
 {
     throw new NotSupportedException("Unable to remove messages within a transaction");
 }
Ejemplo n.º 19
0
		internal MessageQueueTransaction (IMessageQueueTransaction delegateTx)
		{
			this.delegateTx = delegateTx;
		}
Ejemplo n.º 20
0
 public IMessage Receive(TimeSpan timeout,
                         IMessageQueueTransaction transaction)
 {
     return(DoReceive(transaction, timeout, null, true));
 }
Ejemplo n.º 21
0
 public IMessage ReceiveByCorrelationId(string id, TimeSpan timeout,
                                        IMessageQueueTransaction transaction)
 {
     return(DoReceive(transaction, timeout, ByCorrelationId(id), true));
 }
Ejemplo n.º 22
0
		public IMessage Receive (IMessageQueueTransaction transaction)
		{
			return Run (transaction, Receiver());
		}
Ejemplo n.º 23
0
		public IMessage Receive (TimeSpan timeout,
		                         IMessageQueueTransaction transaction)
		{
			return DoReceive (transaction, timeout, null, true);
		}
Ejemplo n.º 24
0
		public IMessage ReceiveByCorrelationId (string id,
		                                        IMessageQueueTransaction transaction)
		{
			return Run (transaction, Receiver (ByCorrelationId (id)));
		}
Ejemplo n.º 25
0
		public IMessage Receive (IMessageQueueTransaction transaction)
		{
			return DoReceive (transaction, TimeSpan.MaxValue, null, true);
		}
 /// <inheritdoc />
 public TransactionalMessage()
 {
     _queueMessage            = null;
     _messageQueueTransaction = null;
 }
Ejemplo n.º 27
0
 public IMessage Receive(IMessageQueueTransaction transaction)
 {
     return(DoReceive(transaction, TimeSpan.MaxValue, null, true));
 }
 public IMessage RemoveCurrent(TimeSpan timeout, IMessageQueueTransaction transaction)
 {
     throw new NotImplementedException();
 }
 /// <inheritdoc />
 public TransactionalMessage(QueueMessage queueMessage, IMessageQueueTransaction messageQueueTransaction)
 {
     _queueMessage            = queueMessage;
     _messageQueueTransaction = messageQueueTransaction;
 }