File: pubsub.rb

package info (click to toggle)
ruby-amqp 1.8.0-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, bullseye, forky, sid, trixie
  • size: 2,508 kB
  • sloc: ruby: 8,272; sh: 11; makefile: 10
file content (43 lines) | stat: -rwxr-xr-x 1,237 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#!/usr/bin/env ruby
# encoding: utf-8

require "bundler"
Bundler.setup

$:.unshift(File.expand_path("../../../lib", __FILE__))

require "amqp"

EventMachine.run do
  AMQP.connect do |connection|
    channel  = AMQP::Channel.new(connection)
    exchange = channel.topic("pub/sub")

    # Subscribers.
    channel.queue("Everything about development").bind(exchange, :routing_key => "technology.dev.#").subscribe do |payload|
      puts "A new dev post: '#{payload}'"
    end
    channel.queue("Everything about rubies").bind(exchange, :routing_key => "#.ruby").subscribe do |headers, payload|
      puts "A new post about rubies: '#{payload}', routing key = #{headers.routing_key}"
    end

    # Let's publish some test data.
    exchange.publish "Ruby post",     :routing_key => "technology.dev.ruby"
    exchange.publish "Erlang post",   :routing_key => "technology.dev.erlang"
    exchange.publish "Sinatra post",  :routing_key => "technology.web.ruby"
    exchange.publish "Jewelery post", :routing_key => "jewelery.ruby"



    show_stopper = Proc.new {
      connection.close do
        EM.stop
      end
    }

    Signal.trap "INT",  show_stopper
    Signal.trap "TERM", show_stopper

    EM.add_timer(1, show_stopper)
  end
end