MoinMoin Logo
  • Comments
  • Immutable Page
  • Menu
    • Navigation
    • RecentChanges
    • FindPage
    • Local Site Map
    • Help
    • HelpContents
    • HelpOnMoinWikiSyntax
    • Display
    • Attachments
    • Info
    • Raw Text
    • Print View
    • Edit
    • Load
    • Save
  • Login

Navigation

  • Start
  • Sitemap
Revision 15 as of 2016-09-08 15:37:12
  • RabbitMQ

RabbitMQ

Erlang installation on Slackware

Requires Erlang:

  • su
  • cd /tmp
  • wget http://slackbuilds.org/slackbuilds/13.0/development/erlang-otp.tar.gz

  • tar xvzf erlang-otp.tar.gz
  • cd erlang-otp
  • wget http://www.erlang.org/download/otp_src_R13B03.tar.gz

  • wget http://www.erlang.org/download/otp_doc_man_R13B03.tar.gz

  • ./erlang-otp.SlackBuild

  • installpkg /tmp/erlang-otp-13B03-i486-1_SBo.tgz

Slackbuild

  • wget http://slackbuilds.org/slackbuilds/14.1/development/erlang-otp.tar.gz

  • tar xvzf erlang-otp.tar.gz
  • cd erlang-otp
  • wget http://www.erlang.org/download/otp_src_R16B02.tar.gz

  • wget http://www.erlang.org/download/otp_doc_man_R16B02.tar.gz

  • ./erlang-otp.SlackBuild

  • installpkg /tmp/erlang-otp-16B02-x86_64-1_SBo.tgz

UNIX server installation

  • cd /opt
  • wget http://www.rabbitmq.com/releases/rabbitmq-server/v3.3.1/rabbitmq-server-generic-unix-3.3.1.tar.gz

  • tar xvzf rabbitmq-server-generic-unix-3.3.1.tar.gz
  • ln -s rabbitmq_server-3.3.1 rabbitmq
  • /opt/rabbitmq/sbin/rabbitmq-server

Python client

  • pip install pika # python client

Examples

http://www.rabbitmq.com/tutorials/tutorial-one-python.html

Producer

   1 #!/usr/bin/env python
   2 import pika
   3 connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
   4 channel = connection.channel()
   5 channel.queue_declare(queue='hello')
   6 channel.basic_publish(exchange='',  routing_key='hello', body='Hello World!')
   7 print " [x] Sent 'Hello World!'"
   8 connection.close()

Consumer

   1 #!/usr/bin/env python
   2 import pika
   3 connection = pika.BlockingConnection(pika.ConnectionParameters(host='localhost'))
   4 channel = connection.channel()
   5 channel.queue_declare(queue='hello')
   6 print ' [*] Waiting for messages. To exit press CTRL+C'
   7 
   8 def callback(ch, method, properties, body):
   9     print " [x] Received %r" % (body,)
  10 
  11 channel.basic_consume(callback, queue='hello', no_ack=True)
  12 channel.start_consuming()

Topic

Publish/Subscribe, sent message goes to all topic subscribers.

produceTopic.py

   1 #!/usr/bin/env python
   2 import pika
   3 import sys
   4 
   5 if __name__=='__main__':
   6     exchangeName='broadcast'
   7     message = sys.argv[1]
   8     repetition= int( sys.argv[2] )
   9 
  10     connection = pika.BlockingConnection(pika.ConnectionParameters(host='localhost'))
  11     channel = connection.channel()
  12     channel.exchange_declare(exchange=exchangeName, type='fanout')
  13     for count in range(1,repetition+1):
  14         msg='%s %d'%(message,count)
  15         channel.basic_publish(exchange=exchangeName, routing_key='', body=msg)
  16         print(" [x] Producer sent message %s to topic %s" % (msg , exchangeName) )
  17 
  18     connection.close()

consumeTopic.py

   1 #!/usr/bin/env python
   2 import pika
   3 import sys
   4 
   5 def consumeTopic(ch, method, properties, body):
   6     print(" [x] %s received message %s" % (sys.argv[1] ,  body  ) )
   7 
   8 if __name__=='__main__':
   9     topicName='broadcast'
  10     connection = pika.BlockingConnection(pika.ConnectionParameters( host='localhost'))
  11     channel = connection.channel()
  12     channel.exchange_declare(exchange=topicName, type='fanout')
  13     result = channel.queue_declare(exclusive=True)
  14     privateQueue = result.method.queue
  15     channel.queue_bind(exchange=topicName, queue=privateQueue)
  16 
  17     print(' [*] %s waiting for broadcasts. To exit press CTRL+C'%( sys.argv[1] ) )
  18     channel.basic_consume(consumeTopic, queue=privateQueue, no_ack=True)
  19     channel.start_consuming()

Queue

Several subscribers are bound to a queue. Each message is only consumed/processed by one of the subscribers.

produceQueue.py

   1 #!/usr/bin/env python
   2 import pika
   3 import sys
   4 
   5 if __name__=='__main__':
   6     queueName='hello'
   7     connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
   8     channel = connection.channel()
   9     channel.queue_declare(queue=queueName)
  10     payload = sys.argv[1]
  11     maxCount = int(sys.argv[2]) + 1
  12 
  13     for count in range(1,maxCount):
  14         msg = '%s %d!'%(payload , count)
  15         channel.basic_publish(exchange='',  routing_key=queueName, body=msg  )
  16         print " [x] Sent message '%s' to queue %s"%(msg , queueName)
  17     connection.close()

consumeQueue.py

   1 #!/usr/bin/env python
   2 import pika
   3 import sys
   4 
   5 def messageHandler(ch, method, properties, body):
   6     print " [x] %s received message %s" % (sys.argv[1], body)
   7 
   8 if __name__=='__main__':
   9     queueName='hello'
  10     consumerName =  sys.argv[1]
  11     connection = pika.BlockingConnection(pika.ConnectionParameters(host='localhost'))
  12     channel = connection.channel()
  13     channel.queue_declare(queue=queueName)
  14     print ' [*] %s  Waiting for messages. To exit press CTRL+C'%( consumerName )
  15     channel.basic_consume(messageHandler, queue=queueName, no_ack=True)
  16     channel.start_consuming()
  • MoinMoin Powered
  • Python Powered
  • GPL licensed
  • Valid HTML 4.01