Exemplo n.º 1
0
 public static ChannelMessage CreateChannelMessage(object message, IMessageSerializer messageSerializer)
 {
     if (messageSerializer == null) throw new ArgumentNullException(nameof(messageSerializer));
     var messageType = message.GetType();
     var stream = messageSerializer.Serialize(message);
     var channelMessage = new ChannelMessage(stream);
     channelMessage.AddHeader(MessageHeaders.MessageType, messageType.FullName);
     channelMessage.AddHeader(MessageHeaders.UserPrincipal, Environment.UserName);
     channelMessage.AddHeader(MessageHeaders.SendingMachine, Environment.MachineName);
     channelMessage.AddHeader(MessageHeaders.SendingModule, ResolveAssemblyFullName());
     return channelMessage;
 }
Exemplo n.º 2
0
        private void OnPeekCompleted(object sender, PeekCompletedEventArgs e)
        {
            if (OnMessage == null)
            {
                return;
            }

            var transaction = new MessageQueueTransaction();

            transaction.Begin();

            try
            {
                var queueMessage = inputQueue.Receive(transaction);
                var headers      = GetMessageHeaders(queueMessage);
                var message      = new ChannelMessage(queueMessage.BodyStream);
                message.AddHeader(headers);
                OnMessage(message);
                transaction.Commit();
            }
            catch (Exception)
            {
                transaction.Abort();
                throw;
            }
            finally
            {
                inputQueue.BeginPeek();
            }
        }
Exemplo n.º 3
0
        private void OnReceiveCompleted(object sender, ReceiveCompletedEventArgs e)
        {
            var m = inputQueue.EndReceive(e.AsyncResult);

            if (OnMessage != null)
            {
                var headers = GetMessageHeaders(m);
                var message = new ChannelMessage(e.Message.BodyStream);
                message.AddHeader(headers);
                OnMessage(message);
            }

            inputQueue.BeginReceive();
        }
Exemplo n.º 4
0
        private void OnMessage(BrokeredMessage message)
        {
            try
            {
                if (OnMessageReceived != null)
                {
                    var headers = ResolveMessageHeaders(message);
                    var bodyStream = message.GetBody<Stream>();
                    var channelMessage = new ChannelMessage(bodyStream);
                    channelMessage.AddHeader(headers);
                    OnMessageReceived(this, new MessageReceivedEventArgs { Message = channelMessage });
                }

                message.Complete();
            }
            catch (Exception ex)
            {
                message.DeadLetter();
                throw;
            }
        }
Exemplo n.º 5
0
        private void OnReceivedMessage(object sender, BasicDeliverEventArgs ea)
        {
            if (OnMessage == null)
            {
                channel.BasicAck(ea.DeliveryTag, false);
                return;
            }

            var body    = ea.Body;
            var message = new ChannelMessage(new MemoryStream(body));

            foreach (var header in ea.BasicProperties.Headers)
            {
                var value = Encoding.UTF8.GetString((byte[])header.Value);
                message.AddHeader(header.Key, value);
            }

            OnMessage(message);

            channel.BasicAck(ea.DeliveryTag, false);
        }
        public void OnError(Exception ex)
        {
            if (channelMessage == null)
            {
                throw new Exception("ChannelMessage is null!", ex);
            }
            channelMessage.BodyStream.Position = 0;

            var level = 0;

            while (ex != null)
            {
                var headerName = $"EzBus.ErrorMessage L{level}";
                var value      = $"{DateTime.UtcNow}: {ex.Message}";
                channelMessage.AddHeader(headerName, value);
                ex = ex.InnerException;
                level++;
            }

            var endpointAddress = new EndpointAddress(busConfig.ErrorEndpointName);

            sendingChannel.Send(endpointAddress, channelMessage);
        }
Exemplo n.º 7
0
        private void OnPeekCompleted(object sender, PeekCompletedEventArgs e)
        {
            if (OnMessageReceived == null) return;

            var transaction = new MessageQueueTransaction();
            transaction.Begin();

            try
            {
                var queueMessage = inputQueue.Receive(transaction);
                var headers = GetMessageHeaders(queueMessage);
                var message = new ChannelMessage(queueMessage.BodyStream);
                message.AddHeader(headers);
                OnMessageReceived(this, new MessageReceivedEventArgs { Message = message });
                transaction.Commit();
            }
            catch (Exception)
            {
                transaction.Abort();
                throw;
            }
            finally
            {
                inputQueue.BeginPeek();
            }
        }
Exemplo n.º 8
0
        private void OnReceiveCompleted(object sender, ReceiveCompletedEventArgs e)
        {
            var m = inputQueue.EndReceive(e.AsyncResult);

            if (OnMessageReceived != null)
            {
                var headers = GetMessageHeaders(m);
                var message = new ChannelMessage(e.Message.BodyStream);
                message.AddHeader(headers);
                OnMessageReceived(this, new MessageReceivedEventArgs { Message = message });
            }

            inputQueue.BeginReceive();
        }
Exemplo n.º 9
0
Arquivo: Host.cs Projeto: Zapote/EzBus
        private void PlaceMessageOnErrorQueue(ChannelMessage message, Exception exception)
        {
            var level = 0;

            while (exception != null)
            {
                var headerName = $"EzBus.ErrorMessage L{level}";
                var value = $"{DateTime.Now}: {exception.Message}";
                message.AddHeader(headerName, value);
                exception = exception.InnerException;
                level++;
            }

            sendingChannel.Send(new EndpointAddress(endpointErrorName), message);
        }