Skip to content

Commit

Permalink
Method to build RabbitMQ connection_parameters.
Browse files Browse the repository at this point in the history
  • Loading branch information
calumhalcrow committed Dec 19, 2011
1 parent d0e6fd8 commit fa1f7da
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 27 deletions.
46 changes: 26 additions & 20 deletions chat/chatroom.py
@@ -1,5 +1,6 @@
#! /usr/bin/env python #! /usr/bin/env python
from os import path as op import os
import os.path as op
import signal import signal
import pika import pika
from pika.adapters.tornado_connection import TornadoConnection from pika.adapters.tornado_connection import TornadoConnection
Expand All @@ -11,6 +12,7 @@
from lib.observer import Observable from lib.observer import Observable
import django.core.handlers.wsgi import django.core.handlers.wsgi
from urlparse import urlparse from urlparse import urlparse
from django.conf import settings


ROOT = op.normpath(op.join(op.dirname(__file__), '../')) ROOT = op.normpath(op.join(op.dirname(__file__), '../'))


Expand All @@ -33,13 +35,11 @@ def send_message(self, message):




class PikaClient(Observable): class PikaClient(Observable):
def __init__(self, queue_name, rabbitmq_url): def __init__(self):
Observable.__init__(self) Observable.__init__(self)


self.queue_name = queue_name #self.queue_name = settings.RABBITMQ_QUEUE_NAME

self.queue_name = 'hello'
# amqp://uname:pwd@host.heroku.srs.rabbitmq.com:13029/vhost
self.rabbitmq_url = urlparse(rabbitmq_url)


# States # States
self.connected = False self.connected = False
Expand All @@ -52,25 +52,31 @@ def __init__(self, queue_name, rabbitmq_url):
# Message caches # Message caches
self.messages = list() self.messages = list()


# amqp://uname:pwd@host.heroku.srs.rabbitmq.com:13029/vhost
def connection_parameters(self):
rabbitmq_url = urlparse('RABBITMQ_URL' in os.environ and os.environ['RABBITMQ_URL'] or 'amqp://localhost')

connection_parameters = {'host': rabbitmq_url.hostname}
if rabbitmq_url.port:
connection_parameters['port'] = rabbitmq_url.port
if rabbitmq_url.username:
connection_parameters['credentials'] = pika.PlainCredentials(
rabbitmq_url.username,
rabbitmq_url.password)
if rabbitmq_url.path:
connection_parameters['virtual_host'] = rabbitmq_url.path

return connection_parameters

def connect(self): def connect(self):
if self.connecting: if self.connecting:
pika.log.info('Already connecting to RabbitMQ') pika.log.info('Already connecting to RabbitMQ')
return return
pika.log.info('Connecting to RabbitMQ') pika.log.info('Connecting to RabbitMQ')
self.connecting = True self.connecting = True


# build RabbitMQ connection parameters: connection_parameters = self.connection_parameters()
connection_params = {'host': self.rabbitmq_url.hostname} param = pika.ConnectionParameters(**connection_parameters)
if self.rabbitmq_url.port:
connection_params['port'] = self.rabbitmq_url.port
if self.rabbitmq_url.username:
connection_params['credentials'] = pika.PlainCredentials(
self.rabbitmq_url.username,
self.rabbitmq_url.password)
if self.rabbitmq_url.path:
connection_params['virtual_host'] = self.rabbitmq_url.path

param = pika.ConnectionParameters(**connection_params)


self.connection = TornadoConnection(param, self.connection = TornadoConnection(param,
on_open_callback=self.on_connected) on_open_callback=self.on_connected)
Expand Down Expand Up @@ -110,7 +116,7 @@ def get_messages(self):




class Application(): class Application():
def __init__(self, port, rabbitmq_url): def __init__(self, port):
settings = { settings = {
'debug': True, 'debug': True,
'enabled_protocols': ['websocket', 'enabled_protocols': ['websocket',
Expand All @@ -130,7 +136,7 @@ def __init__(self, port, rabbitmq_url):
(r'.*', tornado.web.FallbackHandler, {'fallback': wsgi_app}), (r'.*', tornado.web.FallbackHandler, {'fallback': wsgi_app}),
], **settings) ], **settings)


self.message_queue = PikaClient('hello', rabbitmq_url) self.message_queue = PikaClient()
self.message_queue.attach(self) self.message_queue.attach(self)
self.server = None self.server = None


Expand Down
5 changes: 4 additions & 1 deletion frontend/events/signals.py
Expand Up @@ -5,8 +5,11 @@
from events.models import Message, Checkin from events.models import Message, Checkin
from django.utils import simplejson from django.utils import simplejson


from chat.chatroom import PikaClient

def publish(data): def publish(data):
connection = pika.BlockingConnection(pika.ConnectionParameters(**settings.RABBITMQ_CONN)) connection_parameters = PikaClient().connection_parameters()
connection = pika.BlockingConnection(pika.ConnectionParameters(**connection_parameters))
channel = connection.channel() channel = connection.channel()
channel.queue_declare(queue=settings.RABBITMQ_QUEUE_NAME) channel.queue_declare(queue=settings.RABBITMQ_QUEUE_NAME)


Expand Down
9 changes: 3 additions & 6 deletions server.py
Expand Up @@ -11,13 +11,13 @@
from chat.chatroom import Application from chat.chatroom import Application


ROOT = op.normpath(op.dirname(__file__)) ROOT = op.normpath(op.dirname(__file__))
def main(port, rabbitmq_url): def main(port):
# Starting Django # Starting Django
sys.path.append(op.join(ROOT, 'frontend')) sys.path.append(op.join(ROOT, 'frontend'))
os.environ['DJANGO_SETTINGS_MODULE'] = 'frontend.settings' os.environ['DJANGO_SETTINGS_MODULE'] = 'frontend.settings'


# Tornadio app part # Tornadio app part
app = Application(port, rabbitmq_url) app = Application(port)
# Cleanup code # Cleanup code
def shutdown(sig, frame): def shutdown(sig, frame):
app.stop() app.stop()
Expand All @@ -36,7 +36,4 @@ def shutdown(sig, frame):
parser.add_option('-p', '--port', dest='port', help='Specify the socket IO port') parser.add_option('-p', '--port', dest='port', help='Specify the socket IO port')
(options, args) = parser.parse_args() (options, args) = parser.parse_args()


rabbitmq_url = 'RABBITMQ_URL' in os.environ and os.environ['RABBITMQ_URL'] or 'amqp://localhost' main(port=options.port or 8001)

main(port=options.port or 8001,
rabbitmq_url=rabbitmq_url)

0 comments on commit fa1f7da

Please sign in to comment.