|  | @@ -32,9 +32,10 @@ from kombu.utils.encoding import safe_repr, bytes_t
 | 
	
		
			
				|  |  |  from kombu.utils.limits import TokenBucket
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  from celery import bootsteps
 | 
	
		
			
				|  |  | +from celery import signals
 | 
	
		
			
				|  |  |  from celery.app.trace import build_tracer
 | 
	
		
			
				|  |  |  from celery.canvas import signature
 | 
	
		
			
				|  |  | -from celery.exceptions import InvalidTaskError
 | 
	
		
			
				|  |  | +from celery.exceptions import InvalidTaskError, NotRegistered
 | 
	
		
			
				|  |  |  from celery.utils.functional import noop
 | 
	
		
			
				|  |  |  from celery.utils.log import get_logger
 | 
	
		
			
				|  |  |  from celery.utils.text import truncate
 | 
	
	
		
			
				|  | @@ -434,14 +435,19 @@ class Consumer(object):
 | 
	
		
			
				|  |  |      def on_unknown_message(self, body, message):
 | 
	
		
			
				|  |  |          warn(UNKNOWN_FORMAT, self._message_report(body, message))
 | 
	
		
			
				|  |  |          message.reject_log_error(logger, self.connection_errors)
 | 
	
		
			
				|  |  | +        signals.task_rejected.send(sender=self, message=message, exc=None)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      def on_unknown_task(self, body, message, exc):
 | 
	
		
			
				|  |  |          error(UNKNOWN_TASK_ERROR, exc, dump_body(message, body), exc_info=True)
 | 
	
		
			
				|  |  |          message.reject_log_error(logger, self.connection_errors)
 | 
	
		
			
				|  |  | +        self.app.backend.mark_as_failure(
 | 
	
		
			
				|  |  | +            message.headers['id'], NotRegistered(message.headers['task']))
 | 
	
		
			
				|  |  | +        signals.task_unknown.send(sender=self, message=message, exc=exc)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      def on_invalid_task(self, body, message, exc):
 | 
	
		
			
				|  |  |          error(INVALID_TASK_ERROR, exc, dump_body(message, body), exc_info=True)
 | 
	
		
			
				|  |  |          message.reject_log_error(logger, self.connection_errors)
 | 
	
		
			
				|  |  | +        signals.task_rejected.send(sender=self, message=message, exc=exc)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      def update_strategies(self):
 | 
	
		
			
				|  |  |          loader = self.app.loader
 |