2015-09-08 45 views
6

3 sinyal sonra kapandı ve Pika kullanarak bir RabbitMQ komisyoncu gönderir.Pika bağlantısı I (Tornado kullanarak) HTTP istekleri alır bir komut dosyası, onları ayrıştırır yazıyorum

kod şuna benzer: Gördüğünüz gibi

def main(): 
    conn_params = pika.ConnectionParameters(
     host=BROKER_NAME, 
     port=BROKER_PORT, 
     ssl=True, 
     virtual_host=VIRTUAL_HOST, 
     credentials=pika.PlainCredentials(BROKER_USER, BROKER_PASS), 
     heartbeat_interval=HEARTBEAT_INTERVAL 
    ) 
    conn = pika.BlockingConnection(conn_params) 
    channel = conn.channel() 

    # Create the web server which handles application requests. 
    application = tornado.web.Application([ 
     (URL_BILLING, SomeHandler, dict(channel=channel)) 
    ]) 

    # Start the server 
    application.listen(LISTENING_PORT) 
    tornado.ioloop.IOLoop.instance().start() 

, tek bir bağlantı ve kanalı açın ve oluşturulan işleyici herhangi örneğine kanalı geçmek fikri trafiğini kurtarmak için varlık ve her istek için yeni bir bağlantı/kanal açmayı önlemek.

Yaşadığım sorun, bağlantının 3 kalp atışları'dan sonra kapatılmasıdır. Sorunun ne olduğunu anlamaya amacıyla Wireshark'ı kullanılan ama görebildiğim sunucunun bir PSH gönderir olmasıdır (bu kalp atışı olduğunu varsayarak) ve benim komut dosyaları bir ACK ile cevap verir. Bu, aralarında HEARTBEAT_INTERVAL ile 3 kez olur ve ardından sunucu bir FIN gönderir ve bağlantı ölür.

bu olur neden herhangi bir fikir? Ayrıca, bağlantıyı açık tutmalı mıyım yoksa göndermem gereken her mesaj için yeni bir tane oluşturmalı mıyım?

Yardımlarınız için teşekkürler.

GÜNCELLEME: Ben RabbitMQ günlüğüne baktım ve şöyle der: Ben sunucu istemciye kalp atışlarını gönderme amaçlı olduğunu düşünmüş Missed heartbeats from client, timeout: 10s , bu cevap emin olun ve bu ben Wireshark kullanarak gözlenen şeyle hemfikir için buna sunucuya değil, başka bir yol ve müşteriye bildirmek içindir istemci görünüyor bu log dan, ancak, besbelli, bildirmez. Bunu doğru mu anladım?

GÜNCELLEME: çeşit, bunu anladım. Bir engelleme bağlantısı (kullandığım şey) kalp atışlarını gönderememektedir çünkü bu iyi engellenmektedir. this issue belirtildiği gibi, heartbeat_interval parametreler sadece sunucu ile bağlantı anlaşması için kullanılır, ancak müşteri aslında kalp atışlarını göndermez. Bu durumda, pika ile uzun süredir devam eden bağlantıyı sürdürmenin en iyi yolu nedir? Ben bir kalp atışı her 10 dakikada heartbeat_interval, sunucu varsayılan yapar, böylece bağlantı gelecek ziyaretçiler için ... 30 dakika sonra

cevap