Upload
codemotion
View
182
Download
1
Embed Size (px)
Citation preview
www.erlang-solutions.com
Gabriele Santomaggio
gabriele.santomaggio@erlang-solutions.comwww.erlang-solutions.com
▸ Working at Erlang Solutions▸ RabbitMQ contributor▸ Co-author of RabbitMQ Cookbook▸ @gsantomaggio
www.erlang-solutions.com
What is RabbitMQ ?
▸ Multi-protocol Messaging broker ▸ Written in Erlang
Producer
Consumer
Exchange
Queue
Server
Virtual host
Binding
www.erlang-solutions.com
RabbitMQ CLIENTS
▸ Java▸ .NET/C# Client▸ Python▸ PHP▸ Erlang▸ Node.js▸ iPhone (Dev in progress)▸ Others…
www.erlang-solutions.com
1. Create team ("my_company")
2. Create different rooms ("tech.programming", "tech.networking","marketing")
3. Send message to the room4. Send private messages5. Store messages6. Clustering / HA
Messaging - example
GOALS
www.erlang-solutions.com
What we need
my_company
App. client 1
App. client 2
Db - service 1
App 1
App 2
Db - service 2Exchange
Persistent Queue
Temporary Queues
Db - service n
www.erlang-solutions.com
R1: Create team
exchange_declare(exchange="my_company", exchange_type="topic")
www.erlang-solutions.com
R2: Room subscribe
queue_declare(exclusive=True, auto_delete=True)
queue_bind(exchange="my_company", queue=queue,
routing_key="tech.programming")
basic_consume(on_message, queue=queue, no_ack=True)
www.erlang-solutions.com
headers = { 'sender_user':my_user_name, 'sent': datetime.datetime.now(), 'is_private': False}properties = pika.BasicProperties( headers=headers)
channel.publish(exchange="my_company", routing_key="tech.programming" properties=properties, body="I love Erlang!")
R3: Send message to the room
www.erlang-solutions.com
headers = { 'sender_user':my_user_name, 'sent': datetime.datetime.now(), 'is_private': True}properties = pika.BasicProperties( headers=headers)
channel.publish(exchange="my_company", routing_key="gabriele",
properties=properties, body="how are you? :)!")
R4: Send private message
www.erlang-solutions.com
R5: Store messages
channel.queueDeclare("store.messages", true, false, false, null);
channel.queueBind("store.messages", "my_company", "#");
channel.basicQos(1);// round robin channel.basicConsume("store.messages", new DefaultConsumer()...
www.erlang-solutions.com
▸ rabbitmqctl stop_app▸ rabbitmqctl reset▸ rabbitmqctl join_cluster rabbit@server
▸ rabbitmqctl start_app
Clustering!
www.erlang-solutions.com
Federation/Shovel - Plugin
▸ Loose coupling ▸ WAN-friendly ▸ Tolerant to network failures
Node 1 Node 2AMQP client
www.erlang-solutions.com
Cloud scaling...
Db - Service Db - Service Db - Service
store.messages - HA
Client 1 Client 2 Client..n
www.erlang-solutions.com
Full example
▸ Full description(soon...I hope:)) https://www.erlang-solutions.com/blog.html
▸ Source code (other languages)https://github.com/Gsantomaggio/rabbitmqexample
www.erlang-solutions.com
THANK YOU!
Any questions?
gabriele.santomaggio@erlang-solutions.comwww.erlang-solutions.com @gsantomaggio