FEUC Tec 2016 - Desacoplando WorkFlows com RabbitMQ

59
Desacoplamento de Workflows com RabbitMQ [email protected] "A única maneira de fazer um excelente trabalho é amar o que você faz." (Steve Jobs)

Transcript of FEUC Tec 2016 - Desacoplando WorkFlows com RabbitMQ

Page 1: FEUC Tec 2016 - Desacoplando WorkFlows com RabbitMQ

Desacoplamento de Workflows com RabbitMQ

[email protected]

"A única maneira de fazer um excelente trabalho é amar o que você faz." (Steve Jobs)

Page 2: FEUC Tec 2016 - Desacoplando WorkFlows com RabbitMQ

Bacana!! :)

Page 3: FEUC Tec 2016 - Desacoplando WorkFlows com RabbitMQ

Clientes MundiPagg - 40% MarketShare

LOJAS DEPARTAMENTO MODA ENTRETENIMENTO ALIMENTOS

Temos mais de 1500 lojas em nosso portfólio, algumas delas são as maiores marcas brasileiras e internacionais.

ÓLEO TV

Page 4: FEUC Tec 2016 - Desacoplando WorkFlows com RabbitMQ

Vamos dominar o mundo!!

Page 5: FEUC Tec 2016 - Desacoplando WorkFlows com RabbitMQ

Quer jogar?

Page 6: FEUC Tec 2016 - Desacoplando WorkFlows com RabbitMQ

Relaxa!! D boa, você vai achar a solução!

Page 7: FEUC Tec 2016 - Desacoplando WorkFlows com RabbitMQ

{ Seja criativo!! :) =)

Page 8: FEUC Tec 2016 - Desacoplando WorkFlows com RabbitMQ

Quer um café?

Page 9: FEUC Tec 2016 - Desacoplando WorkFlows com RabbitMQ
Page 10: FEUC Tec 2016 - Desacoplando WorkFlows com RabbitMQ

C# .Net

jQuery

PHP

Magento

Angular.js

Node.js

Gulp

Java

Ruby

SQL Server

MongoDB

Kibana

Log StashRedis

RabbitMQCassandra

Scala Akka.Net

Python

TFS

Git

ApacheJira

SentryMonitis

Python

New RelicAzure

Nosso Stack

MVC

REST

Web APIGo

Page 11: FEUC Tec 2016 - Desacoplando WorkFlows com RabbitMQ

Vamos dominar o mundo!!!!

Page 12: FEUC Tec 2016 - Desacoplando WorkFlows com RabbitMQ

Faça parte do nosso time!

[email protected]

[email protected]

"A única maneira de fazer um excelente trabalho é amar o que você faz." (Steve Jobs)

Page 13: FEUC Tec 2016 - Desacoplando WorkFlows com RabbitMQ

Faça parte do nosso time!

[email protected]

{ TEMOS VAGAS }

"A única maneira de fazer um excelente trabalho é amar o que você faz." (Steve Jobs)

Page 14: FEUC Tec 2016 - Desacoplando WorkFlows com RabbitMQ

Alexandre Brandão

{ Microsoft C# .Net Solution Developer, C++ Linux Developer, C/C++ Embedded Programmer }

<contatos> <twitter>

@abrandaolustosa </twitter> <skype>

[email protected] </skype></contatos>

Gestor de TIAnalista Desenvolvedor Sênior

Arquiteto de Sistemas

curl -data “experiencia=16_anos&motivacao=inovacao%20e%20pesquisa” https://www.mundipagg.com

Page 15: FEUC Tec 2016 - Desacoplando WorkFlows com RabbitMQ

Message Broker

Page 16: FEUC Tec 2016 - Desacoplando WorkFlows com RabbitMQ

“Definição” : “An enterprise service bus (ESB) is a software architecture model used for designing and implementing communication between mutually interacting software applications in a service-oriented architecture (SOA)”

{

}

Page 17: FEUC Tec 2016 - Desacoplando WorkFlows com RabbitMQ

Integraçãode

Sistemas

Page 18: FEUC Tec 2016 - Desacoplando WorkFlows com RabbitMQ

Recursos

Page 19: FEUC Tec 2016 - Desacoplando WorkFlows com RabbitMQ

<wrong>Não utilize workflows centralizados e dependentes do banco de dados</wrong>

“Repense sua arquitetura”

Page 20: FEUC Tec 2016 - Desacoplando WorkFlows com RabbitMQ

Pipeline – Service Bus

Page 21: FEUC Tec 2016 - Desacoplando WorkFlows com RabbitMQ

{ Soluções – Service Bus }

- RabbitMQ- CloudAMQP (RabbitMQ)- Azure ServiceBus- IBM MQ Series- Amazon SQS- SQL Server Service Broker- Microsoft Message Queue- OpenShift- Kafka

Page 22: FEUC Tec 2016 - Desacoplando WorkFlows com RabbitMQ

https://www.rabbitmq.com/

• Robust messaging for applications• Easy to use• Runs on all major operating systems• Supports a huge number of developer

platforms• Open source and commercially supported• Multiplatform for Windows, Linux and Mac OS• Erlang

Page 23: FEUC Tec 2016 - Desacoplando WorkFlows com RabbitMQ

RabbitMQ - SDKs

C# .Net PHP

JavaRuby

ErlangPerl

Javascript

GoPython

Scala

Haskell

Page 24: FEUC Tec 2016 - Desacoplando WorkFlows com RabbitMQ

The Advanced Message Queuing Protocol (AMQP) is an open standard application layer protocol for message-oriented middleware. The defining features of AMQP are message orientation, queuing, routing (including point-to-point and publish-and-subscribe), reliability and security.

AMQP

Page 25: FEUC Tec 2016 - Desacoplando WorkFlows com RabbitMQ

To become the standard protocol for interoperability between all messaging

middleware

AMQP

Page 26: FEUC Tec 2016 - Desacoplando WorkFlows com RabbitMQ

PluginsManagement

• Gerenciamento• Configuração• Monitoramento

STOMP/ MQTT• Integrações utilizando outros protocolos de comunicação

Federation / Shovel• Configuração de cluster em redes não confiáveis

Page 27: FEUC Tec 2016 - Desacoplando WorkFlows com RabbitMQ

Características do RabbitMQ• Queue• Consumer

• Public/Subscriber• Exchange• Channel• Persitent

• Durável / Transiente• Atomicidade• Round-Robin• Acknolodge

• Ack/Nack• TTL (Time to Live)

Page 28: FEUC Tec 2016 - Desacoplando WorkFlows com RabbitMQ

Tipos de fila do RabbitMQ

• Basic• Work• Topic• Route• Fanout• RPC

Page 29: FEUC Tec 2016 - Desacoplando WorkFlows com RabbitMQ

Basic - RabbitMQ

P – ProducerC – ConsumerQueue in Red

The simplest thing that does something

Page 30: FEUC Tec 2016 - Desacoplando WorkFlows com RabbitMQ

Work - RabbitMQ

Distributing tasks among workers

Automatic - Round-Robin

Page 31: FEUC Tec 2016 - Desacoplando WorkFlows com RabbitMQ

Publish/Subscribe (FanOut)- RabbitMQ

Sending messages to many consumers at once

Exchange Types: direct, topic, headers and fanoutchannel.exchange_declare(exchange='direct_logs', type=‘fanout')

Page 32: FEUC Tec 2016 - Desacoplando WorkFlows com RabbitMQ

Routing - RabbitMQ

Receiving messages selectivelychannel.exchange_declare(exchange='direct_logs', type='direct')channel.basic_publish(exchange='direct_logs', routing_key=severity, body=message)

Page 33: FEUC Tec 2016 - Desacoplando WorkFlows com RabbitMQ

Topics - RabbitMQ

Receiving messages based on a patternchannel.exchange_declare(exchange='direct_logs',

type=‘topic')

Page 34: FEUC Tec 2016 - Desacoplando WorkFlows com RabbitMQ

RPC Async WorkFlow - RabbitMQ

Remote procedure call implementationDefine properties: CorrelationId and ReplyTo (QueueName to reply

message)

Page 35: FEUC Tec 2016 - Desacoplando WorkFlows com RabbitMQ

Install Client - RabbitMQ{ "require": { "php-amqplib/php-amqplib": "2.5.*" }}

$composer install or update

Tutorial: https://www.rabbitmq.com/tutorials/

Page 36: FEUC Tec 2016 - Desacoplando WorkFlows com RabbitMQ

API de Autorização { Stack }

Repositório de código: • https://github.com/alexandrebl• https://

github.com/alexandrebl/IMastersPHPExp2016

Page 37: FEUC Tec 2016 - Desacoplando WorkFlows com RabbitMQ

• NoSQL• Cache de dados• Dicionário (Chave/Valor)• Dados em memória• Persistência como opção• Stand Alone• Cluster• Replicação• Redis-cli• Redis Manager

• NoSQL• Json Format Data• Dados em disco• Stand Alone• Shard• Replica• Mongo Shell• RoboMongo• MongoChef

• PHP Framework• MVC• Open-source• REST API• Event/handle• Console• Composer

Page 38: FEUC Tec 2016 - Desacoplando WorkFlows com RabbitMQ

Fluxo da API de Autorização

Page 39: FEUC Tec 2016 - Desacoplando WorkFlows com RabbitMQ

Sending message with PHP

require_once __DIR__ . '/vendor/autoload.php';use PhpAmqpLib\Connection\AMQPStreamConnection;use PhpAmqpLib\Message\AMQPMessage;

$connection = new AMQPStreamConnection('localhost', 5672, 'guest',

'guest');$channel = $connection->channel();

Page 40: FEUC Tec 2016 - Desacoplando WorkFlows com RabbitMQ

Sending message with PHP

$channel->queue_declare('hello', false, false, false, false);

$msg = new AMQPMessage('Hello World!');$channel->basic_publish($msg, '', 'hello');

$channel->close();$connection->close();

Page 41: FEUC Tec 2016 - Desacoplando WorkFlows com RabbitMQ

Receiving message with PHP$callback = function($msg) { echo " [x] Received ", $msg->body, "\n"; };

$channel->basic_consume('hello', '', false, true, false, false, $callback);

while(count($channel->callbacks)) { $channel->wait();}

Page 42: FEUC Tec 2016 - Desacoplando WorkFlows com RabbitMQ

Sending message with C# .Netusing RabbitMQ.Client;

var factory = new ConnectionFactory() { HostName = "localhost"

};

using(var connection = factory.CreateConnection())using(var channel = connection.CreateModel()){ }

Page 43: FEUC Tec 2016 - Desacoplando WorkFlows com RabbitMQ

Sending message with C# .Netchannel.QueueDeclare(

queue: "hello", durable: false, exclusive: false, autoDelete: false, arguments: null);

Page 44: FEUC Tec 2016 - Desacoplando WorkFlows com RabbitMQ

Sending message with C# .Netvar body = Encoding.UTF8.GetBytes(message);

channel.BasicPublish(exchange: "", routingKey: "hello", basicProperties: null, body: body);

Page 45: FEUC Tec 2016 - Desacoplando WorkFlows com RabbitMQ

RabbitMQ - Tutoriaishttps://www.rabbitmq.com/getstarted.html

Page 46: FEUC Tec 2016 - Desacoplando WorkFlows com RabbitMQ

RabbitMQ – Curso on-linehttps://www.pluralsight.com/courses/rabbitmq-dotnet-developers

Page 47: FEUC Tec 2016 - Desacoplando WorkFlows com RabbitMQ

RabbitMQ Manager• Free• Gestão de objetos

• Queue• Exchange• Channels• Routing

• Taxa de tranferência• Simulação• Recursos de hardware

Page 48: FEUC Tec 2016 - Desacoplando WorkFlows com RabbitMQ

Instalação do RabbitMQ Manager

rabbitmq-plugins enable rabbitmq_management

http://server-name:15672/

Page 49: FEUC Tec 2016 - Desacoplando WorkFlows com RabbitMQ

Azure Service Bus

Page 50: FEUC Tec 2016 - Desacoplando WorkFlows com RabbitMQ

Azure Service Bus Documentation

Page 51: FEUC Tec 2016 - Desacoplando WorkFlows com RabbitMQ

Azure Service Bus

•Queue•Notification Services

•Service Bus Pipeline

• IoT Hub Messaging•Dashboard Admin

Page 52: FEUC Tec 2016 - Desacoplando WorkFlows com RabbitMQ

Microsoft Azure Service Bus Manager

Page 53: FEUC Tec 2016 - Desacoplando WorkFlows com RabbitMQ

{Seja hoje uma pessoa

melhor do que você foi ontem

}

Page 54: FEUC Tec 2016 - Desacoplando WorkFlows com RabbitMQ

Pesquise...

Page 55: FEUC Tec 2016 - Desacoplando WorkFlows com RabbitMQ

Pesquise...Estude...

Page 56: FEUC Tec 2016 - Desacoplando WorkFlows com RabbitMQ

Pesquise...Estude...

Domine...

Page 57: FEUC Tec 2016 - Desacoplando WorkFlows com RabbitMQ

Pesquise...Estude...

Influencie...

Domine...

Page 58: FEUC Tec 2016 - Desacoplando WorkFlows com RabbitMQ

Alexandre Brandão

Twitter: @abrandaolustosaE-mail: [email protected]: +55 (21) 97367-6161

https://github.com/alexandrebl

Obrigado :)

Linkedin: abrandaol

Page 59: FEUC Tec 2016 - Desacoplando WorkFlows com RabbitMQ

Alexandre Brandão

Twitter: @abrandaolustosaE-mail: [email protected]: +55 (21) 97367-6161

https://github.com/alexandrebl

Perguntas?

Linkedin: abrandaol