HareGo: When RabbitMQ meets Go (Čeština)

(Arsham Shirvani) (18. prosince 2020)

předmluva

Ve společnosti Blokur používáme RabbitMQ pro asynchronní komunikace mezi mikroslužbami a řízením pracovních míst. Knihovna AMQP je de facto standardem pro aplikace Go, je však velmi nízká, což ztěžuje psaní flexibilního a testovatelného kódu.

Ve světě Go existuje několik knihoven na vysoké úrovni, které usnadňují komunikaci s RabbitMQ. Bohužel neuspokojily všechny naše případy použití, nebo byly velmi konkrétní v tom, co nabízejí, což nám velmi ztížilo práci. Proto jsme se rozhodli vybudovat vlastní knihovnu.

Potřebovali jsme něco, na čem bychom mohli rychle začít pracovat, pro nejdůležitější část našich každodenních prací: řešení problémů. Cokoli kolem toho je vývojová cena a nezapadá do našeho modelu.

Zadejte HareGo

Začali jsme uvažovat o vytvoření našeho vlastního knihovna s následujícími vlastnostmi:

  1. Měla by podporovat téměř všechny aspekty knihovny AMQP.
  2. Musí být dobře otestována a snadno testovatelná.
  3. Musí být snadno použitelné a rozšiřitelné.
  4. Měly by přijít s rozumnými výchozími hodnotami, které prostě fungují.
  5. Musí být současně bezpečné.
  6. Dobré mít schopnost znovu zařadit zprávy do fronty (nejen Nack) a být schopni se zprávou manipulovat před opětovným zařazením do fronty.

S potěšením oznamujeme, že jsme tuto knihovnu otevřeli. V době psaní tohoto článku podporujeme verzi Go 1.14 a vyšší.

API

Rozhraní HareGo je velmi jednoduché. Musíte vytvořit harego.Client objekt pomocí praktického harega. NewClient () funkce. Jediným požadavkem funkce NewClient () je adresa serveru RabbitMQ. Můžete nakonfigurovat všechny aspekty klienta a následně základního klienta AMQP předáním harego.ConfigFunc konfigurační funkce poskytované knihovnou.

Ve výchozím nastavení je harego.Client vytvoří jednoho pracovníka, který zpracovává jeden požadavek na publikování nebo jeden požadavek najednou. Klient získá náhodné jméno spotřebitele. Výchozí chování nastavuje autoDelete a autoAck vlastnosti všech zpráv jako nepravdivé. Pokud si přejete, můžete je však nastavit jinak.

Můžete předat harego.Workers (3) konfigurační funkce, která má 3 souběžné pracovníky. To platí pro publikování a konzumaci zpráv. Knihovna zaručuje doručení další dostupné zprávy do dalšího dostupného pracovního slotu.

Je dobré předat harego.QueueName () konfigurace, aby klient věděl, se kterou frontou by měl komunikovat. Výchozí název fronty je „harego“.

Klient je rozhraní s následujícími specifikacemi:

Publikování zpráv

Chcete-li publikovat zprávy, můžete předat * amqp.Publishing namítá metodu Publikovat . Zpráva bude zpracována dalším dostupným pracovníkem.

Spotřebování zpráv

Spotřeba metoda je blokovací volání, které by používalo obslužnou rutinu pokaždé, když je od makléře přijata nová zpráva. Přestane se spotřebovávat, když je kontext zrušen nebo je klient zavřen.

Obslužný program by měl vrátit dvě hodnoty: AckType hodnota a zpoždění. Zpoždění určuje dobu, po kterou by měl spát, než odpoví makléři, a hodnota AckType určuje, co se má se zprávou stát.

Hodnoty AckType

Bylo rozhodnuto nastavit „Multiple“ hodnota ack to false, aby bylo možné reagovat pouze na jednu zprávu v případě více pracovníků. Aby pracovní systém fungoval, musíme nastavit hodnotu předběžného načtení alespoň na počet pracovníků.

Pro tento typ existují čtyři hodnoty:

  1. AckTypeAck : odpovídá msg.Ack.
  2. AckTypeNack : odpovídá msg.Nack.
  3. AckTypeReject : odpovídá msg.Reject.
  4. AckTypeRequeue : odešle zprávu zpět do fronty a odpoví msg.Ack. Další informace najdete v části Zprávy ve frontě.

Zprávy ve frontě

S knihovnou AMQP můžete Nack zprávy a budou doručeny dalšímu dostupnému spotřebiteli. Někdy to není to, co očekáváte, a potřebujete, aby se zpráva vrátila na konec fronty a byla doručena znovu. S HareGo je to nejen možné, ale můžete také manipulovat se zprávou před opětovným zařazením do fronty. Zde je příklad opětovného zařazení do fronty až pětkrát.

Tipy a triky

Více připojení

Při použití této knihovny vytvořte více harego.Client objektů, které chcete adresovat různé aspekty vaší logiky. Řekněme, že čtete z jedné fronty a píšete do dvou front, vytvořte tři objekty a zavolejte dvěma vydavatelům uvnitř spotřebitele první:

Testovatelný kód

Aby bylo snadné zesměšňovat harego.Client , můžete vytvořit typ funkce, který by vrátil nového klienta a chybu. Můžete použít falešnou generující knihovnu a vytvořit faleš z rozhraní harego.Client a použít jej ve svých testech.

V následujícím úryvku používáme ke generování falešných souborů knihovnu mockery a svědčit knihovna pro prosazování falešných zpráv. Samozřejmě si můžete vybrat knihovnu, která vám nejvíce vyhovuje.

Závěrečná slova

Další informace najdete v úložišti knihovny. Pokud potřebujete jakýkoli požadavek na funkci nebo narazíte na problém s knihovnou, vytvořte problém na portálu github.

Chcete se připojit k našemu tým? Přejděte prosím na tento odkaz a přihlaste se.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *