rabbitmq plugins talk

68
WRITING PLUGINS WITH RABBITMQ Noah Gift and Michael Vierling

Upload: noah-gift

Post on 11-May-2015

3.993 views

Category:

Documents


3 download

DESCRIPTION

Writing Erlang plugins for RabbitMQ.

TRANSCRIPT

Page 1: RabbitMQ Plugins Talk

WRITING PLUGINS WITH RABBITMQNoah Gift and Michael Vierling

Page 2: RabbitMQ Plugins Talk

Noah’s Background Film Commercial Data Center

Automation Software Los Angeles, Atlanta, New

Zealand, San Francisco I like programming in ANY

language that is innovative

Page 3: RabbitMQ Plugins Talk

How & Why Why AMQP? Why Erlang? Why OTP? Why RabbitMQ? How – Machinery

Page 4: RabbitMQ Plugins Talk

Why AMQP Industry Message

Standard Cisco, Microsoft, Red

Hat, VMWare, JPMorgan, Chase, Goldman Sachs

Binary wire protocal

Page 5: RabbitMQ Plugins Talk

Why AMQP: Continued Key component in

Distributed Architecture Enables Multi-OS, Multi-

Language Reliable, Transactional,

Flow-Control, Fault-tolerant

Page 6: RabbitMQ Plugins Talk

Downsides of AMQP AMQP 1.0 is almost final Support resources Upgrade glitches Monitoring issues Investment in the future

Page 7: RabbitMQ Plugins Talk

Why Erlang? Functional Language Immutable Data Scalable Reliable, Fault-tolerant

Page 8: RabbitMQ Plugins Talk

Why RabbitMQ Built with Erlang 10K messages per

second – transient mode

3-5K messages per second – persistent mode

Page 9: RabbitMQ Plugins Talk

Why RabbitMQ Transactions Open Source Maintained by VMWare

Page 10: RabbitMQ Plugins Talk

Broker Infrastructure

Page 11: RabbitMQ Plugins Talk

Broker Infrastructure Repeatable Install Reliable storage Redundant hardware

Page 12: RabbitMQ Plugins Talk

Broker Infrastructure: Continued

Cluster of nodes Disaster Recovery Logging (such as

Splunk) and monitoring Operations & Support

Page 13: RabbitMQ Plugins Talk

Broker Infrastructure: Use Escript

Page 14: RabbitMQ Plugins Talk

Broker Infrastructure Future? Integrate Rebar Continuous Integration

Testing QuickCheck

Page 15: RabbitMQ Plugins Talk

RabbitMQ Clients Any AMQP Clients

(Apache) Ruby Python C# F# (Wrap the C# dll)

Page 16: RabbitMQ Plugins Talk

Consume.py Part: A

Page 17: RabbitMQ Plugins Talk

Consume.py Part: B

Page 18: RabbitMQ Plugins Talk

Consume.py Part: C

Page 19: RabbitMQ Plugins Talk

Send.py Part: A

Page 20: RabbitMQ Plugins Talk

Send.py Part: B

Page 21: RabbitMQ Plugins Talk

Writing RabbitMQ Plugin: WHY

Access internal RabbitMQ functionality

Running in same Erlang VM as broker can increase performance

Leverage your existing infrastructure

Page 22: RabbitMQ Plugins Talk

Writing RabbitMQ Plugin: WHY NOT

Developers don’t know Erlang

Poorly written plugin could crash broker

You could lock yourself to internal API

Page 23: RabbitMQ Plugins Talk

Stable RabbitMQ Plugin Rabbitmq-management

(replaced Alice) Rabbitmq-shovel Rabbitmq-stomp Rabbitmq-erlang-client

Page 24: RabbitMQ Plugins Talk

Experimental RabbitMQ Plugin Ideas

Rabbitmq-auth-backend-ldap

Rabbitmq-auth-mechanism-ssl

Rabbitmq-jsonrpc-channel

Rabbitmq-xmpp

Page 25: RabbitMQ Plugins Talk

Crazy RabbitMQ Plugin Ideas

Distributed Data Structure

Artificial Intelligence Data Mining Create a protocol on top Event Processing

Page 26: RabbitMQ Plugins Talk

Michael Background Apple 5 Years Ascend/Lucent 4 Years Various Startups

Page 27: RabbitMQ Plugins Talk

Supervision Tree

Page 28: RabbitMQ Plugins Talk

Plugin Supervisor

Page 29: RabbitMQ Plugins Talk

Rabbit RSS Supervisor

Page 30: RabbitMQ Plugins Talk

Rabbit RSS Worker: Slide A

Page 31: RabbitMQ Plugins Talk

Rabbit RSS Worker: Slide B

Page 32: RabbitMQ Plugins Talk

Rabbit RSS Worker: Slide C

Page 33: RabbitMQ Plugins Talk

Rabbit RSS Worker: Slide D

Page 34: RabbitMQ Plugins Talk

Rabbit RSS Worker: Slide E

Page 35: RabbitMQ Plugins Talk

Rabbit RSS Worker: Slide F

Page 36: RabbitMQ Plugins Talk

XML Parsing

Page 37: RabbitMQ Plugins Talk

RSS.ERL: Slide A

Page 38: RabbitMQ Plugins Talk

RSS.ERL: Slide B

Page 39: RabbitMQ Plugins Talk

RSS.ERL: Slide C

Page 40: RabbitMQ Plugins Talk

RSS.ERL: Slide D

Page 41: RabbitMQ Plugins Talk

Checkout source: HG clone

Page 42: RabbitMQ Plugins Talk

Make: Be Patient….

Page 43: RabbitMQ Plugins Talk

Build

Page 44: RabbitMQ Plugins Talk

Skeleton

Page 45: RabbitMQ Plugins Talk

Symlink Plugin

Page 46: RabbitMQ Plugins Talk

Run Broker

$ make run(rabbit@rabbit9)1>(rabbit@rabbit9)1>application:which_applications().

{rabbit_rss,"Embedded Rabbit RSS Reader","0.01"},

Page 47: RabbitMQ Plugins Talk

Test Broker

$ mkdir test$ vi test/rabbit_rss_tests.erl$ vi Makefile

TEST_APPS=amqp_client rabbit_rssTEST_COMMANDS=rabbit_rss_tests:test() START_RABBIT_IN_TESTS=true

$ make test

Page 48: RabbitMQ Plugins Talk

Package Plugin

Page 49: RabbitMQ Plugins Talk

Plugin Supporting Machinery Unit Tests Source Code Logger Printf AMQP Clients

Page 50: RabbitMQ Plugins Talk

How To Build a Plugin RabbitMQ docs Source Examples

Page 51: RabbitMQ Plugins Talk

Use the Source! Documentation is

hit/miss Google “erlang lists” http://www.erlang.org/

doc/apps/stdlib/ Or skip the docs and go

directly to source ./lib/stdlib/src/lists.erl

Page 52: RabbitMQ Plugins Talk

Lists.erl

Page 53: RabbitMQ Plugins Talk

Logger Plugin executes in its

own process No plugin stdout No plugin execution

debugger

Page 54: RabbitMQ Plugins Talk

Logger: Continued Solution: Erlang’s

logger Output to

/var/log/rabbitmq/<hostname

Nothing to configure

Page 55: RabbitMQ Plugins Talk

RSS.erl

Page 56: RabbitMQ Plugins Talk

OTP Design Principles Supervision Tree Behaviors Applications Releases Release Handling

Page 57: RabbitMQ Plugins Talk

Machine Learning The next step for the

RSS plugin. A potential use case for

RabbitMQ plugins.

Page 58: RabbitMQ Plugins Talk

Fisher Classifier For RSS Feeds

Data mining Classification

Page 59: RabbitMQ Plugins Talk

Fisher Classifier: Slide A

Page 60: RabbitMQ Plugins Talk

Fisher Classifier: Slide B

Page 61: RabbitMQ Plugins Talk

Fisher Classifier: Slide C

Page 62: RabbitMQ Plugins Talk

Fisher Classifier: Slide D

Page 63: RabbitMQ Plugins Talk

Fisher Classifier: Slide E

Page 64: RabbitMQ Plugins Talk

Fisher Classifier: Slide E

Page 65: RabbitMQ Plugins Talk

Fisher Classifier: Slide F

Page 66: RabbitMQ Plugins Talk

Fisher Classifier: Slide G

Page 67: RabbitMQ Plugins Talk

Conclusion AMQP Erlang Python RSS

Page 68: RabbitMQ Plugins Talk

Questions Code:

https://github.com/mikev/rabbitmq_rss_plugin

Contact: “Noah Gift” [email protected], “Michael Vierling” [email protected]