Exemple #1
0
        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);
        }
Exemple #2
0
        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);
        }
Exemple #4
0
        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);
        }
Exemple #5
0
 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());
        }
Exemple #7
0
        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);
        }
Exemple #9
0
 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");
         }
     }
 }
Exemple #10
0
        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");
                }
            }
        }
Exemple #11
0
        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;
            }
        }
Exemple #12
0
        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);
        }
Exemple #13
0
        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());
        }