2012-09-26 23 views
13

Mesaj göndermek için RabbitMQ kullanırken temelde alış verişler, sıralar ve bağlamalar var. Onların fikrini ve birbirleriyle nasıl ilişkilendiklerini anladım, ama neyi kimlerin belirlediğinden emin değilim.RabbitMQ: Değiş tokuşlar, kuyruklar ve bağlamalar - kim ne yapıyor?

Temel olarak, uygulamamda üç senaryo var.

Senaryo 1: Bir yayıncı, birkaç işçi ı ulaşmak istediğiniz ne

bir sıraya mesajları gönderir bir bileşenidir ve bu kuyrukta öğeleri işlemek birkaç işçi süreçler olacaktır işler. Bu bana göre oldukça kolay görünüyor. Kurulum aşağıdaki gibidir:

  • Değişimi: 1 kuyruk
  • Bağlama: bir mesajdır zaman kuyruk alışverişi

bağlıdır 'doğrudan'

  • Kuyruk
  • tip 1 alışverişini borsaya gönderilir, sıraya teslim edilir ve işçi süreçleri görevlerini alır.

    Her şey dayanıklı olacaktır.

    Peki kim neyi kurar? Bence:

    • Üretici
    • Üretici kuyruğunu oluşturur değişimi oluşturur (şu anda çalışan hiçbir işçinin süreçler olabileceği gibi ve orada hiçbir sıra eğer mesaj kaybedilecek durumdaki)
    • Üretici bağlayıcı yapar değişimi
    • Tüketiciler için sıranın sadece kuyrukta

    Sağ dinlemek?

    Senaryo 2: Tek yayıncı, birkaç aboneler, uçucu mesajlar

    İkinci senaryo oldukça farklıdır. Temel olarak, her mesajın şu anda dinleyen her istemciye gönderildiği bir pub/alt senaryodur. Bir müşteri çevrimdışı duruma geçerse, artık mesaj almaz ve onun için herhangi bir yerde saklanmaz. Bağlanma her tüketici

  • n sıraları, bir:

    • Değişim: türü 'fanout'
    • Sırası ile 1 alışverişi Bu, aşağıdaki kurulum sağlar Her kuyruk değişimi için bağlı gereken

    Peki kim neyi kurar?Bence:

    • Üretici
    • Tüketici kuyruğunu oluşturur değişimi oluşturur (kendi kuyruk olduğu gibi ve yapımcı mesajlar ilgilenen kim olursa olsun bilemez)
    • Tüketici onun kuyruğunda için bağlayıcı oluşturur değişimi
    • Tüketici onun kuyruğunda

    Sağ dinler mi?

    Senaryo 3: Bir tüketici çevrimdışı giderse Bir yayıncı, birkaç aboneler, dayanıklı mesajlar Temelde

    senaryo 2 ile aynı

    , ancak iletiler kayıp olmamalıdır. Bence bu hiçbir şeyi değiştirmemeli - değil mi?

  • +0

    Kurulum yapmak için kullanılabilecek üçüncü bir kişi var: bir dış yönetici. Daha fazla bilgi için bu yanıtı başka bir soruya bakın: http://stackoverflow.com/questions/6148381/rabbitmq-persistent-message-with-topic-echange/6155733#6155733 –

    +0

    Bunu açık bir şekilde yazmadım, ancak sistem Harici bir yöneticiye ihtiyaç duymadan kendi kendini barındırabilir. –

    cevap

    5

    Ben ne söylemeye hakkı Senaryo tüketici çevrimdışı o zaman dayanıklı sıraları ihtiyaç ve kuyruklar auto_delete'd edilemez giderse mesajlar harcanmaması gerektiğini ise 3.

    hariç olduğunu düşünüyorum.

    Diğer her şey bana doğru görünüyor.

    Senaryo 2 durumunda, RabbitMQ'nun sizin için otomatik olarak sıra adı oluşturmasına izin verebilir ve daha sonra tüketicinin bağlantısı kesildiğinde bu sıraların otomatik olarak silinmesine izin verebilirsiniz.

    +0

    Çok teşekkürler :-)! –