Ali tarafından üretilen - bir butik olmalı, dağıtılmış ileti kuyruğu ara yazılımı RocketMQ

1. RocketMQ nedir?

Yüksek performans, yüksek güvenilirlik, yüksek gerçek zamanlı ve dağıtılmış özelliklere sahip bir kuyruk modelinin mesaj ara yazılımıdır.

Üretici, Tüketici ve kuyruğun tümü dağıtılabilir,

Yapımcı sırayla bazı sıralara mesaj gönderir. Sıra kümesine Konu denir. Tüketici yayın tüketimini kullanıyorsa, bir tüketici örneği bu konuya karşılık gelen tüm kuyrukları tüketir. Küme tüketimi yaparsa, birden fazla tüketici örneği ortalama olarak bu konuya karşılık gelen kuyruk kümesini tüketir.

Sıkı mesaj sırasını garanti edebilir

Zengin mesaj çekme modu sağlayın

Verimli abone yatay genişletme yeteneği

Gerçek zamanlı haber abonelik mekanizması

Milyar düzeyinde mesaj biriktirme yeteneği

Daha az bağımlı

İki, mesaj tekrarlanıyor

Yukarıdaki mesaj sırası problemini çözerken, mesaj tekrarlama olan yeni bir problem ortaya çıktı. Peki RocketMQ mesaj tekrarlama problemini nasıl çözer? Yine de "sadece" çözülmez.

Tekrarlanan mesajların temel nedeni şudur: ağa erişilemez. Veri ağ üzerinden değiş tokuş edildiği sürece, bu problem önlenemez. Yani bu sorunun çözümü, bu sorunu atlamaktır. Soru şu hale gelir: Tüketici iki özdeş mesaj alırsa ne yapılmalı?

  • Tüketici tarafında mesajları işlemek için iş mantığı idempotent kalır
  • Her mesajın benzersiz bir numaraya sahip olduğundan ve mesaj işlemenin başarılı olduğundan ve tekilleştirme tablosunun günlüğünün aynı anda göründüğünden emin olun

Madde 1'in anlaşılması kolaydır İdeopotans korunduğu sürece, kaç tane yinelenen mesaj gelirse gelsin, nihai işlem sonucu aynı olacaktır. İkinci ilke, başarıyla işlenen mesajın kimliğini kaydetmek için bir günlük tablosu kullanmaktır.Yeni gelen mesajın kimliği zaten günlük tablosundaysa, mesaj işlenmeyecektir.

İlk çözüm açıkça tüketici tarafında uygulanacak ve mesajlaşma sisteminin bir işlevi değil. Madde 2, mesaj sisteminde veya iş tarafında uygulanabilir. Normal şartlar altında, yinelenen mesajların olasılığı aslında çok azdır.Mesaj sistemi tarafından uygulanırsa, mesaj sisteminin verimini ve yüksek kullanılabilirliğini kesinlikle etkileyecektir. Bu nedenle, işin kendi başına mesaj kopyalama sorununu çözmesine izin vermek en iyisidir. RocketMQ, mesaj çoğaltma sorununun nedenini çözmez.

RocketMQ mesajların tekrarlanmayacağını garanti etmez.İşletmenizin mesajların kesinlikle tekrarlanmamasını sağlaması gerekiyorsa, bunları işletme tarafında tekilleştirmeniz gerekir.

Üç, iş haberleri

RocketMQ sadece sıradan mesajları, sıralı mesajları değil, aynı zamanda işlem mesajlarını da destekler. İlk önce işlem mesajının ne olduğunu ve işlem mesajlarını destekleme ihtiyacını tartışın. Örnek olarak bir transfer senaryosunu ele alalım: Bob, Smith'e 100 yuan aktarıyor.

Bağımsız bir ortamda, işlemlerin yürütülmesi muhtemelen aşağıdaki gibidir:

Bağımsız bir ortamda transfer işlemlerinin şematik diyagramı

Kullanıcı belirli bir ölçüde büyüdüğünde, Bob ve Smith'in hesap ve bakiye bilgileri artık aynı sunucuda olmadığında, yukarıdaki süreç şu şekilde olur:

Bir küme ortamında transfer işlemlerinin şematik diyagramı

Şu anda, bunun aynı zamanda bir transfer işi olduğunu göreceksiniz ve bir küme ortamında, zaman alıcı gerçekte ikiye katlanıyor, ki bu açıkça kabul edilemez. Bu problem nasıl çözülür?

Büyük işlem = küçük işlem + eşzamansız

Eşzamansız olarak yürütmek için büyük bir işlemi birden çok küçük işleme bölün. Bu, temel olarak, makineler arası işlemlerin yürütme verimliliğini tek bir makineninkiyle tutarlı olacak şekilde optimize eder. Transfer işlemi aşağıdaki iki küçük işleme ayrılabilir:

Küçük işlem + eşzamansız mesaj

Şekilde yerel işlemlerin gerçekleştirilmesi (Bob hesap kesintisi) ve asenkron mesajların gönderilmesi aynı anda başarılı veya başarısız olacak şekilde garanti edilmelidir, yani kesinti başarılı olursa mesaj başarıyla gönderilmelidir, kesinti başarısız olursa, daha fazla mesaj gönderilemez. Soru şu: Önce ödemeyi keselim mi yoksa önce mesajı mı gönderelim?

Önce mesajın ilk gönderildiği duruma bakın.Genel şema aşağıdaki gibidir:

İşlem mesajı: önce mesajı gönder

Sorun şu ki, mesaj başarılı bir şekilde gönderilirse, ancak kesinti başarısız olursa, tüketici mesajı tüketecek ve ardından Smith hesabına para ekleyecektir.

Chengdu Ulusal Günü'nden önce güzel havayı çizmek için mavi gökyüzü çizim tahtası
önceki
Altın sonbahar mevsiminde, "Wuhuashan" ın güzelliğini görmek için İç Moğolistan'daki Daxinganling'e gelin.
Sonraki
Fransa Kupası: Verratti Mbappé'yi vurdu, Paris 3-0 Nantes finale yükseldi
Kar yağıyor! Hebei Zhangjiakou Kangbao, yılın ikinci yarısında ilk karını aldı.
Yuanhe Zhongyuan Li Ying: To B girişimcilik bir gecede gerçekleşmez, ekibin araştırma çalışması temel gereksinimdir
Yeni altıncı nesil iPad gerçekten satın almaya değmeyen hangi "bisiklet"?
Tmallın milyar dolarlık kulübü yeniden genişledi ve 50 anne ve çocuk markası bir milyar oyuncu haline gelebilir
Heilongjiang'daki Weihu Dağı'nın ormanları boyandı ve sonbahar renkleri turistler için içildi
Yetkililer, akademisyenler ve girişimciler Çin'in ithalat ticaretinden bahsediyor
Icardi Sabre Gallardini'yi çift şutla vurdu, Inter Milan 4-0 Cenova deplasmanda
Dört deniz ve beş dağ size her yerde gün doğumunun güzelliğini gösterir
Sonbahar yağmurlarından sonra Hebei, Jinshanling'deki Çin Seddi, bulutlarla dolu
Kluivert Jr. iki pasla gol attı Perotizaniolo, Roma 2-2 Floransa
Nanchong, Sichuan: Doğudan kırmızı güneş doğuyor, Xiaguang Jialing Nehri ile dolu
To Top