示例#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);
        }
示例#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);
        }
示例#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);
        }
        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);
        }
示例#6
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");
         }
     }
 }
示例#7
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");
                }
            }
        }
示例#8
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;
            }
        }