Apresentará as motivações e lições aprendidas na criação de uma aplicação de larga escala orientada a serviços. Entenda como fatores como performance, estilos de comunicação e produtividade da equipe relacionam-se à estruturação de uma aplicação.
if EM.reactor_running? do_request(params, url, true) else ... end end def do_request(params, url, self_reactor) http = EM::HttpRequest.new(url).post({:body => params.to_json }) http.callback do ... rescue log.error "log goes here..." end EM.stop unless self_reactor end http.errback do ... rescue log.error "log goes here..." end EM.stop unless self_reactor end end
... em do multi = EventMachine::MultiRequest.new enrollments.each_with_index do |enroll, idx| multi.add idx, EM::HttpRequest.new(url).post({ :body => enroll.to_json }) end multi.callback do multi.responses[:errback].each do |err| logger.error "logs goes here..." end EM.stop unless @running end end end
notificações, ou seja, código espalhado e de difícil manutenção • O em-http-request é construído em cima do EventMachine • Logar em arquivos com propósito de recuperar falhas é uma bola de neve
uma forma atômica • VisClient responsável por criar Jobs e construir os parâmetros • Simples depuração e detecção de falhas • Uso de representers github.com/apotonick/roar
de criação de jobs • Lógica de parametrização def self.notify_delayed(resource, type, args) elements = args.respond_to?(:map) ? args : [args] notifier_builder = NotifierBuilder.new(resource, type, elements) notifier_builder.build end