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); }
private string GetEndpointId(RabbitListenerAttribute rabbitListener) { if (!string.IsNullOrEmpty(rabbitListener.Id)) { return(Resolve(rabbitListener.Id)); } else { return("Steeltoe.Messaging.Rabbit.RabbitListenerEndpointContainer#" + Interlocked.Increment(ref _counter)); } }
private string[] ResolveQueues(RabbitListenerAttribute rabbitListener) { var queues = rabbitListener.Queues; var result = new List <string>(); if (queues.Length > 0) { for (var i = 0; i < queues.Length; i++) { ResolveAsString(ResolveExpression(queues[i]), result, true, "Queues"); } } return(result.ToArray()); }
private void ResolveBindingDeclaration(RabbitListenerAttribute rabbitListener, List <string> results) { foreach (var bindingExpression in rabbitListener.Bindings) { var binding = ResolveExpression(bindingExpression, typeof(IBinding), "Binding(s)") as IBinding; if (binding == null) { var bindingName = Resolve(bindingExpression); binding = ApplicationContext.GetService <IBinding>(bindingName); if (binding == null) { throw new InvalidOperationException("Unable to resolve binding: " + bindingExpression + " using: " + bindingName); } } ResolveQueue(binding.Destination, results); } }
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; } }
private IRabbitListenerContainerFactory ResolveContainerFactory(RabbitListenerAttribute rabbitListener, object factoryTarget, string name) { IRabbitListenerContainerFactory factory = null; var containerFactoryBeanName = Resolve(rabbitListener.ContainerFactory); if (!string.IsNullOrEmpty(containerFactoryBeanName)) { if (ApplicationContext == null) { throw new InvalidOperationException("IApplicationContext must be set to resolve container factory by name"); } factory = ApplicationContext.GetService <IRabbitListenerContainerFactory>(containerFactoryBeanName); if (factory == null) { throw new InvalidOperationException("Could not register rabbit listener endpoint on [" + factoryTarget + "], no IRabbitListenerContainerFactory with id '" + containerFactoryBeanName + "' was found"); } } return(factory); }
private string[] ResolveQueues(RabbitListenerAttribute rabbitListener) { var queues = rabbitListener.Queues; var result = new List <string>(); if (queues.Length > 0) { for (var i = 0; i < queues.Length; i++) { var queueExpression = queues[i]; ResolveQueue(queueExpression, result); } } var bindings = rabbitListener.Bindings; if (bindings.Length > 0) { ResolveBindingDeclaration(rabbitListener, result); } return(result.ToArray()); }