Skip to content

Instantly share code, notes, and snippets.

@yuxel
Created May 22, 2010 15:03
Show Gist options
  • Save yuxel/410129 to your computer and use it in GitHub Desktop.
Save yuxel/410129 to your computer and use it in GitHub Desktop.
"""
Kullanici kayit islemlerinden gelen mesajlari dinleyen,
mesaj geldiginde ilgili kullanicinin bulundugu yeri veritabanindan cekme,
kullanicinin bulundugu bu yere yakin diger kullanicilari cekme,
ve bulunan diger kullanicilara e-posta gonderme islemlerini
simule eden kod
http://barryp.org/software/py-amqplib/ adresinden py-amqplib'i indirip kurmalisiniz
"""
from amqplib import client_0_8 as amqp
import time # islemlerin surdugu zamanlari simule etmek icin
class rabbitMQMailQueue:
# yapilandirma degiskenleri
def __init__(self):
# rabbitMQ ayarlari
self.rabbitMQConf = {"hostPort" : "localhost:5672",
"user" : "guest",
"pass" : "guest",
"virtualHost" : "/"
}
# kuyrugun ayarlari
self.queueConf = {"name" : "eposta",
"exchange" : "kayit"
}
# kuyrugu dinle ve gelen her mesajda doJobs methodunu calistir
def listen(self):
try:
# amqp'ye baglan
conn = amqp.Connection(self.rabbitMQConf['hostPort'],
self.rabbitMQConf['user'],
self.rabbitMQConf['pass'],
virtualHost = self.rabbitMQConf['virtualHost'],
insist = False)
chan = conn.channel()
chan.queue_declare( self.queueConf['name'],
durable=True, # kuyruk yeniden basladiginda yeniden yaratilsin
exclusive=False,
auto_delete=False) # son islemden sonra kuyrugu silme
chan.exchange_declare(self.queueConf['exchange'],
type="direct", # direkt olarak ilgili kuyruga gonder
durable=True,
auto_delete=False,)
# queue ile exchange'i bagla
chan.queue_bind(self.queueConf['name'], self.queueConf['exchange'])
# islemden sonra cagirilacak methodu ayarla
chan.basic_consume(self.queueConf['name'],
no_ack=True,
callback=self.doJobs) # ilgili methodu calistir
# kuyrugu dinlemeye basla
while True:
chan.wait()
chan.close()
conn.close()
except Exception, error :
print "Bir hata olustu : ",error
# kuyruktan her mesaj geldiginde ilgili kullaniciya ait asagidaki islemleri yap
def doJobs(self,msg):
print "Kuyruktan bir mesaj alindi"
userId = msg.body
print userId, " id'li kullanicinin bolgesi bulunuyor"
time.sleep(1) # islemin 1 saniye surdugunu varsayalim
print userId, " id'li kullanicinin bulundugu yere yakin kullanicilar bulunuyor"
time.sleep(6) # islemin 6 saniye surdugunu varsayalim
print "Bulunan kullanicilara e-posta gonderiliyor"
time.sleep(3) # e-posta gonderme isleminin 3 saniye surdugunu varsayalim
# toplamda islemler 10 saniye suruyor
# bu islem bittikten sonra kuyruktan yeni mesaj aliniyor
# uygulamayi baslat
if __name__ == '__main__':
mailQueue = rabbitMQMailQueue()
mailQueue.listen()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment