Class: GorgService::Consumer::MessageHandler::Base

Inherits:
Object
  • Object
show all
Defined in:
lib/gorg_service/consumer/message_handler/base.rb

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(message) ⇒ Base

Returns a new instance of Base.



8
9
10
11
12
13
14
15
16
17
18
19
20
# File 'lib/gorg_service/consumer/message_handler/base.rb', line 8

def initialize(message)
  @message=message

  GorgService::Consumer::MessageHandler::ExceptionManager.instance.with_exception_rescuing(self.message) do
    begin
      validate
    rescue GorgService::Message::DataValidationError => e
      raise_hardfail("DataValidationError",error: e.errors)
    end

    process
  end
end

Class Method Details

.handle_error(*errorClasses, &block) ⇒ Object



88
89
90
# File 'lib/gorg_service/consumer/message_handler/base.rb', line 88

def handle_error(*errorClasses,&block)
  GorgService::Consumer::MessageHandler::ExceptionManager.instance.set_rescue_from(*errorClasses,&block)
end

.listen_to(routing_key) ⇒ Object



92
93
94
# File 'lib/gorg_service/consumer/message_handler/base.rb', line 92

def listen_to(routing_key)
  MessageRouter.register_route(routing_key, self)
end

.raise_hardfail(error_message, message: nil, error: nil, data: nil) ⇒ Object

Raises:



64
65
66
67
68
69
70
71
72
73
74
# File 'lib/gorg_service/consumer/message_handler/base.rb', line 64

def raise_hardfail(error_message,message:nil, error: nil, data: nil)
  if message
    reply_to(message,{
        status: 'hardfail',
        error_message: error_message,
        debug_message: error&&error.inspect,
        error_data: data
    })
  end
  raise HardfailError.new(error_message, error)
end

.raise_softfail(error_message, message: nil, error: nil, data: nil) ⇒ Object

Raises:



76
77
78
79
80
81
82
83
84
85
86
# File 'lib/gorg_service/consumer/message_handler/base.rb', line 76

def raise_softfail(error_message,message:nil, error: nil, data: nil)
  if message
    reply_to(message,{
        status: 'softfail',
        error_message: error_message,
        debug_message: error&&error.inspect,
        error_data: data
    })
  end
  raise SoftfailError.new(error_message, error)
end

.reply_to(message, data) ⇒ Object



49
50
51
52
53
54
55
56
57
58
59
60
61
62
# File 'lib/gorg_service/consumer/message_handler/base.rb', line 49

def reply_to(message,data)
  if message.expect_reply?

    reply=GorgService::Message.new(
        event: message.reply_routing_key,
        data: data,
        correlation_id: message.id,
        type: "reply"
    )

    replier=GorgService::Producer.new
    replier.publish_message(reply,exchange: message.reply_to)
  end
end

.reset_listen_to!Object



96
97
98
# File 'lib/gorg_service/consumer/message_handler/base.rb', line 96

def reset_listen_to!
  MessageRouter.delete_routes_of(self)
end

Instance Method Details

#messageObject Also known as: msg



30
31
32
# File 'lib/gorg_service/consumer/message_handler/base.rb', line 30

def message
  @message
end

#processObject



26
27
28
# File 'lib/gorg_service/consumer/message_handler/base.rb', line 26

def process
  GorgService.logger.warn "WARNING : You must define your MessageHandler behavior in #process"
end

#raise_hardfail(error_message, error: nil, data: nil) ⇒ Object



39
40
41
# File 'lib/gorg_service/consumer/message_handler/base.rb', line 39

def raise_hardfail(error_message, error: nil, data: nil)
  self.class.raise_hardfail(error_message, error: error, message:message, data:data)
end

#raise_softfail(error_message, error: nil, data: nil) ⇒ Object



43
44
45
# File 'lib/gorg_service/consumer/message_handler/base.rb', line 43

def raise_softfail(error_message, error: nil, data: nil)
  self.class.raise_softfail(error_message, error: error, message:message, data:data)
end

#reply_with(data) ⇒ Object



35
36
37
# File 'lib/gorg_service/consumer/message_handler/base.rb', line 35

def reply_with(data)
  self.class.reply_to(message, data)
end

#validateObject



22
23
24
# File 'lib/gorg_service/consumer/message_handler/base.rb', line 22

def validate
  GorgService.logger.warn "WARNING : No message schema validation in #{self.class.name}, implement it in #validate(message) "
end