Rabbit MQ y Symfony2

download Rabbit MQ y Symfony2

of 81

Transcript of Rabbit MQ y Symfony2

  • 8/10/2019 Rabbit MQ y Symfony2

    1/81

    Scaling Symfony2 ap

    with

    RabbitMQ

  • 8/10/2019 Rabbit MQ y Symfony2

    2/81

    Kacer Guni@cak

    Software Engineer@SensiLa

    Symfony Certified Deve

    PHPers Silesia@PHP

    https://twitter.com/cakper
  • 8/10/2019 Rabbit MQ y Symfony2

    3/81

    Agenda

    !What is RabbitMQ

    !How to communicate with it from PHP

    !

    How to integrate it with Symfony

    !Diving into details

    !Demo

  • 8/10/2019 Rabbit MQ y Symfony2

    4/81

    Why would I need Messag

  • 8/10/2019 Rabbit MQ y Symfony2

    5/81

    Use Cases

    ! Offloading / Background jobs

    ! Integration

    ! Scaling

    ! Queueing

    ! Scheduling

    ! Events

  • 8/10/2019 Rabbit MQ y Symfony2

    6/81

    Message-oriented Middlew

    () allows distributed applic

    to communicate and exchangeby sending and receiving mes

    http://docs.oracle.com/cd/E19316-01/82

  • 8/10/2019 Rabbit MQ y Symfony2

    7/81

  • 8/10/2019 Rabbit MQ y Symfony2

    8/81!""#$%%&'('&")*++,-.(-/0'1"')".23&%')"%4!'"50650

  • 8/10/2019 Rabbit MQ y Symfony2

    9/81

    What is inside the RabbitM

  • 8/10/2019 Rabbit MQ y Symfony2

    10/81

    Message Broker

  • 8/10/2019 Rabbit MQ y Symfony2

    11/81

    AMQP

  • 8/10/2019 Rabbit MQ y Symfony2

    12/81

    Erlang

  • 8/10/2019 Rabbit MQ y Symfony2

    13/81

    Interoperability

    ! PHP

    ! Clojure

    ! Erlang

    !Java

    ! Perl

    ! Python

    ! Ruby

    ! C#

    !JavaScript

    ! C/C++

    ! Go

    ! Lisp

    ! Haskell

    !

  • 8/10/2019 Rabbit MQ y Symfony2

    14/81

    How does it work?

  • 8/10/2019 Rabbit MQ y Symfony2

    15/81

    Broker

    Bindings

    Producer Exchange

    Queue

    Queue

  • 8/10/2019 Rabbit MQ y Symfony2

    16/81

    Producer

    Producer

  • 8/10/2019 Rabbit MQ y Symfony2

    17/81

    Exchange

    Exchange

  • 8/10/2019 Rabbit MQ y Symfony2

    18/81

    Direct Exchange

    Exchange Queue

  • 8/10/2019 Rabbit MQ y Symfony2

    19/81

    Fanout Exchange

    Exchange

    Queue

    Queue

  • 8/10/2019 Rabbit MQ y Symfony2

    20/81

    Topic Exchange

    #.error

    #.warning, log

    *.mobile.*

    log.error

    log.sql.warning

    log.mobile.error

  • 8/10/2019 Rabbit MQ y Symfony2

    21/81

    . - word separator

  • 8/10/2019 Rabbit MQ y Symfony2

    22/81

    # - prefix/suffix wildcar

  • 8/10/2019 Rabbit MQ y Symfony2

    23/81

    * - word wildcard

  • 8/10/2019 Rabbit MQ y Symfony2

    24/81

    Bindings

    Bindings

    Exchange

    Queue

    Queue

  • 8/10/2019 Rabbit MQ y Symfony2

    25/81

    Queue

    Queue

  • 8/10/2019 Rabbit MQ y Symfony2

    26/81

    Consumer

    Consumer

  • 8/10/2019 Rabbit MQ y Symfony2

    27/81

    How to feed Rabbit from P

  • 8/10/2019 Rabbit MQ y Symfony2

    28/81

    PHP libraries and tools

    !

    php-amqplib

    ! PECL AMQP

    ! amqphp

    ! VorpalBunny

    ! Thumper

    ! CAMQP

  • 8/10/2019 Rabbit MQ y Symfony2

    29/81

    Declare queue

    ?2311-2"031A1-BCDEFG311-2"031

    HI,32',!36"IJK

  • 8/10/2019 Rabbit MQ y Symfony2

    30/81

    Producer

    ?&6MA1-BCDEFD-66'M-HIU-,,3 43),(VINO?2!'11-,5P7'602R#*7,06!H?&6MJIIJI!-,,3I

    -2!3W XYZ [-1" IU-,,3 43),(VI\1WO

  • 8/10/2019 Rabbit MQ y Symfony2

    31/81

    Consumer

    ?2',,7'2]A+*12"031H?&6MN ^

    -2!3I XYZ _-2-0/-( IJ?&6M5P73(`JW\1WOaO

    ?2!'11-,5P7'602R2316*&-

    HI!-,,3IJIIJ+',6-J")*-J+',6-J+',6-J?2'

    B!0,-H23*1"H?2!'11-,5P2',,7'2]6NN ^

    ?2!'11-,5PB'0"HNOa

  • 8/10/2019 Rabbit MQ y Symfony2

    32/81

    RabbitMQ & Symf!""#6$%%6-2*)-.+,02]).23&%#!3"36

  • 8/10/2019 Rabbit MQ y Symfony2

    33/81

    Step 1

  • 8/10/2019 Rabbit MQ y Symfony2

    34/81

    Install RabbitMQ Bundle

    23$-) )-Q*0)- e3,(63*1(%)'770"&Q57*1(,- 9

  • 8/10/2019 Rabbit MQ y Symfony2

    35/81

    Step 2

  • 8/10/2019 Rabbit MQ y Symfony2

    36/81

    Enable bundle in Kernel

    #*7,02 +*12"031)-M06"-)g*1(,-6HN^

    ?7*1(,-6AXHhN

    1-Bi,([3*1(\_'770"DQg*1(,-\i,([3*1(_'770"DZO

    a

  • 8/10/2019 Rabbit MQ y Symfony2

    37/81

    Step 3

  • 8/10/2019 Rabbit MQ y Symfony2

    38/81

    Say thanks to

    @old_sound :)

  • 8/10/2019 Rabbit MQ y Symfony2

    39/81

    Step 4

  • 8/10/2019 Rabbit MQ y Symfony2

    40/81

    Get rid offmanual configura

    3,(R63*1(R)'770"R&Q$2311-2"0316$

    (-+'*,"$

    !36"$ I,32',!36"I#3)"$ K

  • 8/10/2019 Rabbit MQ y Symfony2

    41/81

    Get rid offmanual configura

    #)3(*2-)6$

    !-,,3RB3),($

    2311-2"031$ (-+'*,"-Y2!'1M-R3#"0316$ ^1'&-$I!-,,3IJ"`#-

    2316*&-)6$

    !-,,3RB3),($2311-2"031$ (-+'*,"

    -Y2!'1M-R3#"0316$ ^1'&-$ I!-,,3IJ "`#-

    Q*-*-R3#"0316$ ^1'&-$ I!-,,3Ia

    2',,7'2]$ !-,,3RB3),(R6-)/02-

  • 8/10/2019 Rabbit MQ y Symfony2

    42/81

    Get rid offmanual configura

    #)3(*2-)6$

    !-,,3RB3),($

    2311-2"031$ (-+'*,"-Y2!'1M-R3#"0316$ ^1'&-$ I!-,,3IJ "`#-

    2316*&-)6$

    !-,,3RB3),($2311-2"031$ (-+'*,"

    -Y2!'1M-R3#"0316$ ^1'&-$I!-,,3IJ"`#-

    Q*-*-R3#"0316$ ^1'&-$I!-,,3Ia

    2',,7'2]$ !-,,3RB3),(R6-)/02-

  • 8/10/2019 Rabbit MQ y Symfony2

    43/81

    Step 5

  • 8/10/2019 Rabbit MQ y Symfony2

    44/81

    Produce some data

    #*7,02 +*12"03101(-YC2"031H?1'&-N

    ^?"!065PM-"HI3,(R63*1(R)'770"R&Q.!-,,3RB3),(R#)

    5P#*7,06!H?1'&-NOa

  • 8/10/2019 Rabbit MQ y Symfony2

    45/81

    Step 6

    I l

  • 8/10/2019 Rabbit MQ y Symfony2

    46/81

    Implement consumer

    2,'66U-,,343),(G316*&-)0,-&-1"6G316*&-)k^

    #*7,02 +*12"031-Y-2*"-HCDEFD-66'M-?&6M^

    -2!3WU-,,3?&6M5P73(`VW.FUFRlimOa

    a

  • 8/10/2019 Rabbit MQ y Symfony2

    47/81

    Step 7

    C fi S i C t i

  • 8/10/2019 Rabbit MQ y Symfony2

    48/81

    Configure Service Contain

    6-)/02-6$!-,,3RB3),(R6-)/02-$

    2,'66$G']#-)\U-,,343),(G316*&-)

  • 8/10/2019 Rabbit MQ y Symfony2

    49/81

    Step 8

    R th C

  • 8/10/2019 Rabbit MQ y Symfony2

    50/81

    Run the Consumer

    .%'##%23163,- )'770"&Q$2316*&-) !-,,3RB3),(

    N il d it!

  • 8/10/2019 Rabbit MQ y Symfony2

    51/81

    Nailed it!

  • 8/10/2019 Rabbit MQ y Symfony2

    52/81

    Diving into!""#6$%%6-2*)-.+,02]).23

  • 8/10/2019 Rabbit MQ y Symfony2

    53/81

    Producers

    Custom producer class

  • 8/10/2019 Rabbit MQ y Symfony2

    54/81

    Custom producer class

    #)3(*2-)6$

    !-,,3RB3),($

    2311-2"031$ (-+'*,"

    -Y2!'1M-R3#"0316$ ^1'&-$ I!-,,3IJ "`#-"#$%%& '$()*+,-*##./+.01"*+

    Custom producer class

  • 8/10/2019 Rabbit MQ y Symfony2

    55/81

    Custom producer class

    2,'66 U-,,3F)3(*2-) -Y"-1(6 F)3(*2-)^#*7,02 +*12"031 #*7,06!H?&6Mg3(`J hN

    ^?&6Mg3(`A6-)0',0j-H?&6Mg3(`NO

    #')-1"$$#*7,06!H?&6Mg3(`J hNOa

    a

    Set content type

  • 8/10/2019 Rabbit MQ y Symfony2

    56/81

    Set content type

    +*12"031 RR2316")*2"HN^2345%67%*3'.83*839:)*;%.8B*8".0*;2C%DE.0:?F Ga

  • 8/10/2019 Rabbit MQ y Symfony2

    57/81

    Consumers

    Re queue message

  • 8/10/2019 Rabbit MQ y Symfony2

    58/81

    Re-queue message

    #*7,02 +*12"031 -Y-2*"-HCDEFD-66'M- ?&6MN^

    5H;

  • 8/10/2019 Rabbit MQ y Symfony2

    59/81

    Idle timeouts

    2316*&-)6$!-,,3RB3),($

    2311-2"031$ (-+'*,"

    -Y2!'1M-R3#"0316$ ^1'&-$ I!-,,3IJ "`#-

    Q*-*-R3#"0316$ ^1'&-$ I!-,,3Ia2',,7'2]$ !-,,3RB3),(R6-)/02-

    50#*B35C*.13& LMN

    Limit number of message

  • 8/10/2019 Rabbit MQ y Symfony2

    60/81

    Limit number of message

    .%'##%23163,- )'770"&Q$2316*&-) !-,,3RB3),(

    Quality of Service

  • 8/10/2019 Rabbit MQ y Symfony2

    61/81

    Quality of Service

    Q36R3#"0316$#)-+-"2!R60j-$ :)+*H*3"4B".183& NOOPQQRQ

    D#.A$#& H$#%*=3+1*

  • 8/10/2019 Rabbit MQ y Symfony2

    62/81

    Exchanges

    Exchange options

  • 8/10/2019 Rabbit MQ y Symfony2

    63/81

    Exchange options

    -Y2!'1M-R3#"0316$1'&-$ n3:)*& 05+*"3=H$8.13=3.)5"

    01+$A#*& 3+1*=H$#%*

  • 8/10/2019 Rabbit MQ y Symfony2

    64/81

    Queues

    Queue options

  • 8/10/2019 Rabbit MQ y Symfony2

    65/81

    Queue options

    Q*-*-R3#"0316$

    1'&-$ n01+$A#*& 3+1*=H$#%*$+D1C*83%&

  • 8/10/2019 Rabbit MQ y Symfony2

    66/81

    Purge queue

    O=$))=".8%.#* +$AA53CX&)1+D* 668.6".8H5+C$35.

  • 8/10/2019 Rabbit MQ y Symfony2

    67/81

    Connection

    Make it lazy!

  • 8/10/2019 Rabbit MQ y Symfony2

    68/81

    Make it lazy!

    3,(R63*1(R)'770"R&Q$

    2311-2"0316$(-+'*,"$

    !36"$ I,32',!36"I#3)"$ K

  • 8/10/2019 Rabbit MQ y Symfony2

    69/81

    Setup

    Setup Fabric

  • 8/10/2019 Rabbit MQ y Symfony2

    70/81

    Setup Fabric

    O=$))=".8%.#* +$AA53CX&%*31)6H$A+5"

    #)3(*2-)6$*#,3'(R#02"*)-$$13.B%*31)BH$A+5"& H$#%*

    2316*&-)6$*#,3'(R#02"*)-$

    $13.B%*31)BH$A+5"& H$#%*

  • 8/10/2019 Rabbit MQ y Symfony2

    71/81

    Multiple consumers

    Multiple consumers

  • 8/10/2019 Rabbit MQ y Symfony2

    72/81

    u p e co su e s&*,"0#,-R2316*&-)6$

    !-,,3$

    2311-2"031$ (-+'*,"-Y2!'1M-R3#"0316$ ^1'&-$I!-,,3IJ"`#-$(0)-Q*-*-6$

    !-,,35/0#$1'&-$ !-,,3R/0#2',,7'2]$!-,,3R/0#RB3),(R6-)/02-)3*"01MR]-`6$

    5/0#!-,,35)-M*,')$

    1'&-$ !-,,3R)-M*,')2',,7'2]$!-,,3R)-M*,')RB3),(R6-)/02

  • 8/10/2019 Rabbit MQ y Symfony2

    73/81

    Anonymous Consumer

    Anonymous Consumer

  • 8/10/2019 Rabbit MQ y Symfony2

    74/81

    y

    #)3(*2-)6$

    !-,,3$

    2311-2"031$ (-+'*,"

    -Y2!'1M-R3#"0316$ ^1'&-$I!-,,3IJ"`#-

    Anonymous Consumer

  • 8/10/2019 Rabbit MQ y Symfony2

    75/81

    y

    '131R2316*&-)6$

    !-,,3$

    2311-2"031$ (-+'*,"

    -Y2!'1M-R3#"0316$ ^1'&-$I!-,,3IJ"`#-2',,7'2]$ !-,,3RB3),(R6-)/02-

    Anonymous Consumer

  • 8/10/2019 Rabbit MQ y Symfony2

    76/81

    y

    .%'##%23163,-R(-/ )'770"&Q$'13152316*&-) 6+

  • 8/10/2019 Rabbit MQ y Symfony2

    77/81

    g

  • 8/10/2019 Rabbit MQ y Symfony2

    78/81

  • 8/10/2019 Rabbit MQ y Symfony2

    79/81

    Demo time

    Summary

  • 8/10/2019 Rabbit MQ y Symfony2

    80/81

    ! RabbitMQ is fast

    ! and reliable

    ! also language agnostic

    ! and easy to install and use

    ! gives you flexibility

    ! supports high-availability, clustering

  • 8/10/2019 Rabbit MQ y Symfony2

    81/81

    Tank

    !