protected IMessage ToMessagingMessage(IMessage amqpMessage) { if (BatchingStrategy.CanDebatch(amqpMessage.Headers)) { var list = new List <object>(); BatchingStrategy.DeBatch(amqpMessage, fragment => { var convertedObject = MessageConverter.FromMessage(amqpMessage, null); if (convertedObject == null) { throw new MessageConversionException("Message converter returned null"); } list.Add(convertedObject); }); return(RabbitMessageBuilder.WithPayload(list).CopyHeaders(amqpMessage.Headers).Build()); } PreprocesMessage(amqpMessage); var headers = amqpMessage.Headers; var convertedObject = MessageConverter.FromMessage(amqpMessage, InferredArgumentType); if (convertedObject == null) { throw new MessageConversionException("Message converter returned null"); } var builder = (convertedObject is IMessage) ? RabbitMessageBuilder.FromMessage((IMessage)convertedObject) : RabbitMessageBuilder.WithPayload(convertedObject); var message = builder.CopyHeadersIfAbsent(headers).Build(); return(message); }
protected void InvokeHandlerAndProcessResult(IMessage amqpMessage, RC.IModel channel, IMessage message) { _logger?.LogDebug("Processing [{message}]", message); InvocationResult result = null; try { if (Method == null) { var accessor = RabbitHeaderAccessor.GetMutableAccessor(message); accessor.TargetMethod = HandlerAdapter.GetMethodFor(message.Payload); } result = InvokeHandler(amqpMessage, channel, message); if (result.ReturnValue != null) { HandleResult(result, amqpMessage, channel, message); } else { _logger?.LogTrace("No result object given - no result to handle"); } } catch (ListenerExecutionFailedException e) { if (ErrorHandler != null) { try { var messageWithChannel = RabbitMessageBuilder.FromMessage(message).SetHeader(RabbitMessageHeaders.CHANNEL, channel).Build(); var errorResult = ErrorHandler.HandleError(amqpMessage, messageWithChannel, e); if (errorResult != null) { HandleResult(HandlerAdapter.GetInvocationResultFor(errorResult, message.Payload), amqpMessage, channel, message); } else { _logger?.LogTrace("Error handler returned no result"); } } catch (Exception ex) { ReturnOrThrow(amqpMessage, channel, message, ex, ex); } } else { ReturnOrThrow(amqpMessage, channel, message, e.InnerException, e); } } }
public override void OnMessage(IMessage amqpMessage, RC.IModel channel) { PreprocesMessage(amqpMessage); var headers = amqpMessage.Headers; var convertedObject = MessageConverter.FromMessage(amqpMessage, InferredArgumentType); if (convertedObject == null) { throw new MessageConversionException("Message converter returned null"); } var builder = (convertedObject is IMessage message1) ? RabbitMessageBuilder.FromMessage(message1) : RabbitMessageBuilder.WithPayload(convertedObject); var message = builder.CopyHeadersIfAbsent(headers).Build(); InvokeHandlerAndProcessResult(amqpMessage, channel, message); }
public void BuildMessageWithStandardMessage() { var result = RabbitMessageBuilder.WithPayload("Response") .SetHeader("foo", "bar") .SetHeader(RabbitMessageHeaders.TYPE, "msg_type") .SetHeader(RabbitMessageHeaders.REPLY_TO, "reply") .Build(); var session = new Mock <IModel>(); var listener = GetSimpleInstance("Echo", typeof(IMessage <string>)); var replyMessage = listener.BuildMessage(session.Object, result, null); Assert.NotNull(replyMessage); Assert.Equal("Response", EncodingUtils.GetDefaultEncoding().GetString(replyMessage.Payload)); Assert.Equal("msg_type", replyMessage.Headers.Type()); Assert.Equal("reply", replyMessage.Headers.ReplyTo()); Assert.Equal("bar", replyMessage.Headers.Get <string>("foo")); }
public IMessage <string> Echo(IMessage <string> input) { return((IMessage <string>)RabbitMessageBuilder.WithPayload(input.Payload) .SetHeader(RabbitMessageHeaders.TYPE, "reply") .Build()); }