Sha256: 83ae6e9b49147031109e522dbcc346a55fc2ca9d3c0914a3571701a7ef9b16e9

Contents?: true

Size: 1.42 KB

Versions: 1

Compression:

Stored size: 1.42 KB

Contents

require 'celluloid/zmq/current'

Celluloid::ZMQ.init

class PublishSubscribe
  include Celluloid::ZMQ

  def run
    link = "tcp://127.0.0.1:5555"

    s1 = Socket::Pub.new
    s2 = Socket::Sub.new
    s3 = Socket::Sub.new
    s4 = Socket::Sub.new
    s5 = Socket::Sub.new

    s1.linger = 100
    s2.subscribe('') # receive all
    s3.subscribe('animals') # receive any starting with this string
    s4.subscribe('animals.dog')
    s5.subscribe('animals.cat')

    s1.bind(link)
    s2.connect(link)
    s3.connect(link)
    s4.connect(link)
    s5.connect(link)

    sleep 1

    topic = "animals.dog"
    payload = "Animal crackers!"

    s1.identity = "publisher-A"
    puts "sending"
    # use the new multi-part messaging support to
    # automatically separate the topic from the body
    s1.write(topic, payload, s1.identity)

    topic = ''
    s2.read(topic)

    body = ''
    s2.read(body) if s2.more_parts?

    identity = ''
    s2.read(identity) if s2.more_parts?
    puts "s2 received topic [#{topic}], body [#{body}], identity [#{identity}]"


    topic = ''
    s3.read(topic)

    body = ''
    s3.read(body) if s3.more_parts?
    puts "s3 received topic [#{topic}], body [#{body}]"

    topic = ''
    s4.read(topic)

    body = ''
    s4.read(body) if s4.more_parts?
    puts "s4 received topic [#{topic}], body [#{body}]"

    s5_string = ''
    s5.read(s5_string)

    # we will never get here
  end
end

PublishSubscribe.new.run

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
celluloid-zmq-0.17.0 examples/publish_subscribe.rb