Post on 02-Jul-2015
description
MESSAGING WITH AMQP AND RABBITMQ
What is AMQP?AMQP (Advanced Message Queuing Protocol) is a networking protocol that enables conforming client applications to communicate with conforming messaging middleware brokers.
WHAT ARE BROKERS
Messaging brokers receive messages from publishers (applications that publish them, also known as producers) and route them to consumers (applications that process them).
EXAMPLE OF BROKERS
• RabbitMQ (by VMWARE)!• Microsoft's Windows Azure
Service Bus!• Red Hat Enterprise MRG!• StormMQ
Lorem Ipsum Dolor
RABBITMQ Open Source message broker / queueing system written in Erlang implementing AMQP
Who Uses AMQP • JPMorgan - 1 billion AMQP messages per day; used in
dozens of mission critical systems worldwide!• VMware - Makes extensive use of RabbitMQ in its
virtualization products and cloud service!• Google!• UIDAI, Government of India - the largest online
identity project in the world aiming to provide each of India's 1.2 billion residents with a unique identity number!
• AT&T, Smith Electric Vehicles, Mozilla, RED HAT cloud services
INDUSTRIES Telecommunications, Defense, Manufacturing, Internet and Cloud Computing
Installing RABBitMQ
• MAC OSX - brew install rabbitmq !
• Windows - download the exe
Running It rabbitmq-server
Enabling the admin console
• rabbitmq-plugins enable rabbitmq_management!
!• http://http://localhost:
15672/
How to talk to RABBITMQ
An AMQP Client. Available in most languages.
Ruby clients • Bunny!• Ruby AMQP Gem
INSTALLING BUNNY
• gem install bunny !• add to gem file -> gem
‘bunny’
Lorem Ipsum Dolor
AMQP-MODEL• messages can be anything,!plain text, json, bytes, etc.!• Publisher and Consumer
are typically decoupled in big apps
Exchanges and Exchange Types
• Direct exchange - specific routing key!
• Fanout exchange - braodcast!• Topic exchange - regex style
routing key!• Headers exchange
DIRECT EXCHANGE
Lorem Ipsum Dolor
DIRECT EXCHANGE 2
Lorem Ipsum Dolor
FAN-OUT• leaderboard updates or other
global events!• Sport news sites can use score
updates to mobile clients in near real-time!
• Group chats can distribute messages between participants
Lorem Ipsum Dolor
TOPIC EXCHANGE
• delimeter is dots!• * = 1!• # = anything
USING BUNNYrequire “bunny”!
#connect to rabbitmq!
conn = Bunny.new!
conn.start!
#create channel!
channel = conn.create_channel!
#create / subscribe to a queue!
queue = ch.queue(“hello”)!
exchange = ch.default_exchange!
#bind queue to an exchange!
queue.bind(exchange, :routing_key => severity)
exchange.publish("Hello World!", :routing_key => queue.name)
queue.subscribe(:block => true) do |delivery_info, properties, body|!
puts " [x] Received #{body}"!!
# cancel the consumer to exit! delivery_info.consumer.cancel!
end
DEMOcode: https://github.com/selasiehanson/rabbitmq_presentaion_code.git
FANOUT
❖ cd pubsub!
❖ ruby receive_logs.rb > logs_from_rabbit.log!
❖ ruby receive_logs.rb!
❖ ruby emit_log.rb!
❖ ruby emit_log.rb "Hello my peeps"
DIRECT (3 receivers)❖ cd ../routing/!
❖ ruby receive_logs_direct.rb warning error > logs_from_rabbit.log!
❖ ruby receive_logs_direct.rb info warning error!
❖ ruby receive_logs_direct.rb info warning!
❖ ruby emit_log_direct.rb error “Message 1”!
❖ ruby emit_log_direct.rb warning “Message 2”
TOPIC❖ cd ../topic/!
❖ ruby receive_logs_topic.rb "#"!
❖ ruby receive_logs_topic.rb "kern.*"!
❖ ruby receive_logs_topic.rb "*.critical"!
❖ ruby receive_logs_topic.rb "kern.*" "*.critical"!
❖ ruby emit_log_topic.rb "kern.critical" "A critical kernel error"
THE END
RESOURCES❖ http://www.amqp.org/!
❖ http://www.rabbitmq.com/!
❖ http://www.rabbitmq.com/getstarted.html!
❖ http://www.rabbitmq.com/tutorials/amqp-concepts.html!
❖ http://rubybunny.info/!
❖ http://rubybunny.info/articles/getting_started.html!
❖ read the bunny docs!
❖ http://www.rubyinside.com/rabbitmq-a-fast-reliable-queuing-option-for-rubyists-1681.html