protected void ProcessListener(MethodRabbitListenerEndpoint endpoint, RabbitListenerAttribute rabbitListener, object bean, object target, string beanName) { endpoint.MessageHandlerMethodFactory = MessageHandlerMethodFactory; endpoint.Id = GetEndpointId(rabbitListener); endpoint.SetQueueNames(ResolveQueues(rabbitListener)); endpoint.Concurrency = ResolveExpressionAsInteger(rabbitListener.Concurrency, "Concurrency"); endpoint.ApplicationContext = ApplicationContext; endpoint.ReturnExceptions = ResolveExpressionAsBoolean(rabbitListener.ReturnExceptions, "ReturnExceptions"); var group = rabbitListener.Group; if (!string.IsNullOrEmpty(group)) { endpoint.Group = group; } var autoStartup = rabbitListener.AutoStartup; if (!string.IsNullOrEmpty(autoStartup)) { endpoint.AutoStartup = ResolveExpressionAsBoolean(autoStartup, "AutoStartup"); } endpoint.Exclusive = rabbitListener.Exclusive; endpoint.Priority = ResolveExpressionAsInteger(rabbitListener.Priority, "Priority"); ResolveErrorHandler(endpoint, rabbitListener); ResolveAdmin(endpoint, rabbitListener, target); ResolveAckMode(endpoint, rabbitListener); ResolvePostProcessor(endpoint, rabbitListener, target, beanName); var factory = ResolveContainerFactory(rabbitListener, target, beanName); Registrar.RegisterEndpoint(endpoint, factory); }
private void ResolveErrorHandler(MethodRabbitListenerEndpoint endpoint, RabbitListenerAttribute rabbitListener) { if (!string.IsNullOrEmpty(rabbitListener.ErrorHandler)) { var errorHandler = ResolveExpression(rabbitListener.ErrorHandler, typeof(IRabbitListenerErrorHandler), "ErrorHandler"); if (errorHandler is IRabbitListenerErrorHandler) { endpoint.ErrorHandler = (IRabbitListenerErrorHandler)errorHandler; } else if (errorHandler is string errorHandlerName) { if (ApplicationContext == null) { throw new InvalidOperationException("IApplicationContext must be set to resolve ErrorHandler by name"); } endpoint.ErrorHandler = ApplicationContext.GetService <IRabbitListenerErrorHandler>(errorHandlerName); if (endpoint.ErrorHandler == null) { throw new InvalidOperationException("Failed to resolve ErrorHandler by name using: " + errorHandlerName); } } else { throw new InvalidOperationException("ErrorHandler must resolve to a String or IRabbitListenerErrorHandler"); } } }
private void ProcessAmqpListener(RabbitListenerAttribute rabbitListener, MethodInfo method, object bean, string beanName) { var endpoint = new MethodRabbitListenerEndpoint(ApplicationContext, method, bean, _logger); endpoint.Method = method; ProcessListener(endpoint, rabbitListener, bean, method, beanName); }
private void ProcessAmqpListener(RabbitListenerAttribute rabbitListener, MethodInfo method, object bean, string beanName) { _logger?.LogDebug("Adding RabbitListener method {method} from type {type}", method.ToString(), method.DeclaringType); var endpoint = new MethodRabbitListenerEndpoint(ApplicationContext, method, bean, _loggerFactory); endpoint.Method = method; ProcessListener(endpoint, rabbitListener, bean, method, beanName); }
protected void ProcessListener(MethodRabbitListenerEndpoint endpoint, RabbitListenerAttribute rabbitListener, object bean, object target, string beanName) { endpoint.MessageHandlerMethodFactory = MessageHandlerMethodFactory; endpoint.Id = GetEndpointId(rabbitListener); endpoint.SetQueueNames(ResolveQueues(rabbitListener)); endpoint.Concurrency = ResolveExpressionAsInteger(rabbitListener.Concurrency, "concurrency"); endpoint.ApplicationContext = ApplicationContext; endpoint.ReturnExceptions = ResolveExpressionAsBoolean(rabbitListener.ReturnExceptions); var errorHandler = ResolveExpression(rabbitListener.ErrorHandler); if (errorHandler is IRabbitListenerErrorHandler) { endpoint.ErrorHandler = (IRabbitListenerErrorHandler)errorHandler; } else if (errorHandler is string errorHandlerName) { if (!string.IsNullOrEmpty(errorHandlerName)) { endpoint.ErrorHandler = ApplicationContext.GetService <IRabbitListenerErrorHandler>(errorHandlerName); } } else { throw new InvalidOperationException("Error handler must be a service name or IRabbitListenerErrorHandler, not a " + errorHandler.GetType().ToString()); } var autoStartup = rabbitListener.AutoStartup; if (!string.IsNullOrEmpty(autoStartup)) { endpoint.AutoStartup = ResolveExpressionAsBoolean(autoStartup); } endpoint.Exclusive = rabbitListener.Exclusive; endpoint.Priority = ResolveExpressionAsInteger(rabbitListener.Priority, "priority"); ResolveAdmin(endpoint, rabbitListener, target); ResolveAckMode(endpoint, rabbitListener); ResolvePostProcessor(endpoint, rabbitListener, target, beanName); var factory = ResolveContainerFactory(rabbitListener, target, beanName); Registrar.RegisterEndpoint(endpoint, factory); }
private void ResolveAckMode(MethodRabbitListenerEndpoint endpoint, RabbitListenerAttribute rabbitListener) { if (!string.IsNullOrEmpty(rabbitListener.AckMode)) { var ackMode = ResolveExpression(rabbitListener.AckMode, typeof(AcknowledgeMode), "AckMode"); if (ackMode is AcknowledgeMode mode) { endpoint.AckMode = mode; } else if (ackMode is string ackModeString) { endpoint.AckMode = (AcknowledgeMode)Enum.Parse(typeof(AcknowledgeMode), ackModeString); } else { throw new InvalidOperationException("AckMode must resolve to a String or AcknowledgeMode enumeration"); } } }
private void ResolveAdmin(MethodRabbitListenerEndpoint endpoint, RabbitListenerAttribute rabbitListener, object adminTarget) { var rabbitAdmin = Resolve(rabbitListener.Admin); if (!string.IsNullOrEmpty(rabbitAdmin)) { if (ApplicationContext == null) { throw new InvalidOperationException("IApplicationContext must be set to resolve RabbitAdmin by name"); } endpoint.Admin = ApplicationContext.GetService <IRabbitAdmin>(rabbitAdmin); if (endpoint.Admin == null) { throw new InvalidOperationException("Could not register rabbit listener endpoint on [" + adminTarget + "], no RabbitAdmin with id '" + rabbitAdmin + "' was found"); } } }
private void ResolvePostProcessor(MethodRabbitListenerEndpoint endpoint, RabbitListenerAttribute rabbitListener, object target, string name) { var ppBeanName = Resolve(rabbitListener.ReplyPostProcessor); if (!string.IsNullOrEmpty(ppBeanName)) { if (ApplicationContext == null) { throw new InvalidOperationException("IApplicationContext must be set to resolve reply post processor by name"); } var pp = ApplicationContext.GetService <IReplyPostProcessor>(ppBeanName); if (pp == null) { throw new InvalidOperationException("Could not register rabbit listener endpoint on [" + target + "], no IReplyPostProcessor with id '" + name + "' was found"); } endpoint.ReplyPostProcessor = pp; } }