Drivery
Šesť tried v src/Driver implementuje DriverInterface. Vyberte jednu pre emitter a tú istú pre dispatcher. Musia sa zhodovať v názve fronty, kľúčoch priorít a kľúči plánovača, pretože tieto reťazce sú samotná fronta.
Porovnanie
Redis ext-redis | Predis | RabbitMQ lazy | Amazon SQS | FileSystem | Kafka | |
|---|---|---|---|---|---|---|
| Trieda | RedisSetDriver | PredisSetDriver | LazyRabbitMqDriver | AmazonSqsDriver | FileSystemDriver | KafkaDriver |
| Priorita | ✓množina pre každú prioritu | ✓množina pre každú prioritu | ✗vyhodí NotSupportedException | ✗vyhodí NotSupportedException | ✓priečinok pre každú prioritu | ✗vyhodí NotSupportedException |
| Oneskorenie | ✓zoradená množina | ✓zoradená množina | ✗publikuje sa hneď | ✗odošle sa hneď | ✓čas splatnosti v názve súboru | ✗produkuje sa hneď |
| Perzistencia | ~podľa nastavenia RDB alebo AOF v Redise | ~podľa nastavenia RDB alebo AOF v Redise | ✓durable fronta | ✓ukladá SQS | ~súbory na jednom lokálnom disku | ✓retencia topicu |
| Ack | ✗odstráni sa pred handlerom | ✗odstráni sa pred handlerom | ✓ack po handleri | ✓zmaže sa po handleri | ✓zmaže sa po handleri | ✓offset sa commitne po handleri |
Redis ext-redis
- Trieda
RedisSetDriver- Priorita
- ✓množina pre každú prioritu
- Oneskorenie
- ✓zoradená množina
- Perzistencia
- ~podľa nastavenia RDB alebo AOF v Redise
- Ack
- ✗odstráni sa pred handlerom
Predis
- Trieda
PredisSetDriver- Priorita
- ✓množina pre každú prioritu
- Oneskorenie
- ✓zoradená množina
- Perzistencia
- ~podľa nastavenia RDB alebo AOF v Redise
- Ack
- ✗odstráni sa pred handlerom
RabbitMQ lazy
- Trieda
LazyRabbitMqDriver- Priorita
- ✗vyhodí
NotSupportedException - Oneskorenie
- ✗publikuje sa hneď
- Perzistencia
- ✓durable fronta
- Ack
- ✓ack po handleri
Amazon SQS
- Trieda
AmazonSqsDriver- Priorita
- ✗vyhodí
NotSupportedException - Oneskorenie
- ✗odošle sa hneď
- Perzistencia
- ✓ukladá SQS
- Ack
- ✓zmaže sa po handleri
FileSystem
- Trieda
FileSystemDriver- Priorita
- ✓priečinok pre každú prioritu
- Oneskorenie
- ✓čas splatnosti v názve súboru
- Perzistencia
- ~súbory na jednom lokálnom disku
- Ack
- ✓zmaže sa po handleri
Kafka
- Trieda
KafkaDriver- Priorita
- ✗vyhodí
NotSupportedException - Oneskorenie
- ✗produkuje sa hneď
- Perzistencia
- ✓retencia topicu
- Ack
- ✓offset sa commitne po handleri
✓ podporované, ✗ nepodporované, ~ podporované s výhradou. Poznámky nižšie vysvetľujú každú bunku.
Poznámky k Redis ext-redis
- Priorita. Každá celočíselná priorita je samostatná množina v Redise.
wait()číta ako prvé najvyššie číslo. Verzia 5.x používala opačné poradie vkladania (issue #50). - Oneskorenie. Budúce
executeAtide cezZADDdo zoradenej množiny. Presun používaZREMna práve prečítaný prvok. Vo verzii 5.x volalSPOPa nepresunul nikdy (#95). - Perzistencia. Podľa toho, ako je Redis nastavený (RDB alebo AOF). Hermes to nenastavuje. Hodnoty sú v množinách a jednej zoradenej množine.
- Ack. API na potvrdenie neexistuje.
SPOPprvok zmaže a potom beží handler. Návratová hodnotatruealebofalsesa ignoruje.
Poznámky k Predis
- Priorita. Rovnako ako Redis.
- Oneskorenie. Budúce
executeAtide do zoradenej množiny. Presun používaZREMna práve prečítaný prvok a pošle ho znova len worker, ktoréhoZREMho odstránil. - Perzistencia. Rovnako ako Redis.
- Ack. Ten istý
SPOPzo živej množiny.
Poznámky k RabbitMQ lazy
- Priorita.
setupPriorityQueue()vyhodíNotSupportedException.send()ignoruje$priority. - Oneskorenie.
executeAtzostane v JSON.basic_publishprebehne hneď. - Perzistencia. Fronta je deklarovaná ako durable a správy sú perzistentné (
delivery_mode2). Ak chcete ponechať frontu vytvorenú verziou 5.x, odovzdajtedurable: false. - Ack. Manuálny.
basic_ackpo handleri,basic_nacks vrátením do fronty, keď callback zlyhá, prefetch 1. Verzia 5.x používalano_ack = true(#70).
Poznámky k Amazon SQS
- Priorita. Rovnako ako RabbitMQ. Text výnimky uvádza
AmazonSQS. - Oneskorenie.
executeAtzostane v JSON.sendMessageprebehne hneď. - Perzistencia. SQS uchováva telo, kým ho tento driver nezmaže. Driver maže po návrate callbacku. Neúspešný handler nechá správu znova sa objaviť po uplynutí visibility timeoutu.
- Ack.
deleteMessagebeží po úspešnej deserializácii a callbacku. Doručenie je at-least-once. Verzia 5.x mazala pred handlerom (#69).
Poznámky k FileSystem
- Priorita. Každá priorita je priečinok v adresári.
wait()číta ako prvé najvyššie číslo. - Oneskorenie. Názov súboru začína časom splatnosti.
wait()preskakuje súbory, ktoré ešte nie sú splatné. - Perzistencia. Obyčajné súbory na jednom lokálnom súborovom systéme. Nie na NFS.
- Ack. Worker premenuje súbor do
processing/a po callbacku ho zmaže. Správa spadnutého workera sa po visibility timeoute doručí znova.
Poznámky k Kafka
- Priorita. Rovnako ako RabbitMQ. Text výnimky uvádza
Kafka. - Oneskorenie.
executeAtzostane v JSON. Správa sa produkuje hneď. - Perzistencia. Kafka drží topic počas svojej retencie, aj po spracovaní správy.
- Ack. Offset consumera sa commitne po návrate callbacku. Správa spadnutého workera ide ďalšiemu workerovi skupiny. Správy, ktoré sa nedajú deserializovať, sa commitnú a nahlásia, aby nemohli zablokovať particiu.
V rámci jednej priority v Redise alebo Predise poradie nie je FIFO. Množina nemá poradie a SPOP vracia jeden náhodný prvok.
Ktorý súbor skopírovať
| Máte | Začnite od |
|---|---|
| phpredis | Redis, examples/redis |
| Predis | Predis, examples/predis |
| RabbitMQ | RabbitMQ, examples/rabbitmq |
| AWS SQS | Amazon SQS, examples/sqs |
| Jeden server, bez brokera | FileSystem, examples/filesystem |
| Kafka | Kafka, examples/kafka |
Pomocníci na ukončenie nie sú drivery. SharedFileShutdown funguje s akýmkoľvek driverom. RedisShutdown potrebuje ext-redis. PredisShutdown potrebuje Predis. Opisuje ich stránka Ukončenie a limit správ.
Časté otázky
Ktorý driver je najbezpečnejšia predvoľba?
PredisSetDriver. Nepotrebuje rozšírenie, podporuje priority a presúva odložené správy aj opakovania. Vo verzii 5.x je jediný driver, ktorý to robí.
Ktorý driver zachová správy, keď worker spadne?
Od 6.0 LazyRabbitMqDriver, AmazonSqsDriver, KafkaDriver a FileSystemDriver: správu odstránia až po dokončení handlera. Redis drivery ju vyberú vopred. Vo verzii 5.x to nerobil žiadny. Pozrite Architektúra.
Môžu emitter a worker používať rôzne drivery?
Nie. Musia používať tú istú triedu drivera s rovnakými kľúčmi, pretože kľúče sú samotná fronta.
Podporuje niektorý driver potvrdzovanie?
Od 6.0 RabbitMQ potvrdzuje po handleri, SQS a súborový systém mažú po handleri a Kafka commitne po handleri. Redis prvok vyberie vopred.
Existuje ZeroMQ driver?
Vo verzii 3.0.0 sa presunul z balíka do tomaj/hermes-zmq-driver. Vyžaduje tomaj/hermes ^2.1, takže sa s 6.x nenainštaluje; implementujte DriverInterface sami (pozrite Rozširovanie Hermesu).