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; }
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(); } }
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(); }
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; } }
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); }
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(); } }
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(); }
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); }