ScalavaDych vyrážajúce škálovanie pre Laravel aplikácie.
Préjsť na ScalavaRedis, výkonné úložisko dátových štruktúr v pamäti, možno bez problémov integrovať do Laravel aplikácií s cieľom zvýšiť ich výkon a umožniť efektívnu synchronizáciu medzi viacerými Laravel aplikáciami.
V tomto blogovom príspevku sa budeme venovať tomu, ako nakonfigurovať dve aplikácie v Laraveli tak, aby sa pripojili k jednej inštancii Redis a využívali ju na odosielanie a spracovanie synchronizačných úloh. Ukážeme si tiež, ako nastaviť vlastný prefix kľúčov pre Redis, aby sa zachovala izolácia údajov medzi defaultnou queue a synchronizačnou queue. Poďme sa na to pozrieť!
Otvorte súbor config/database.php
v oboch aplikáciách v Laraveli a nájdite pole redis.
Pridajte novú konfiguráciu pripojenia v poli 'connections' pre inštanciu Redis s názvom 'sync'.
Uistite sa, že ste v kľúči options
pripojenia nastavili vlastný prefix. Laravel predvolene generuje prefix pre každý job pushnutý do queue.
Týmto nastavením ho prepíšeme a urobíme ho rovnakým v oboch aplikáciách.
Tu je príklad, ako by mala vyzerať konfigurácia:
'connections' => [
// Other connections...
'sync' => [
'url' => env('SYNC_REDIS_URL'),
'host' => env('SYNC_REDIS_HOST', '127.0.0.1'),
'port' => env('SYNC_REDIS_PORT', '6379'),
'password' => env('SYNC_REDIS_PASSWORD', null),
'database' => env('SYNC_REDIS_DB', '1'),
'options' => [
'prefix' => env('SYNC_REDIS_PREFIX', 'app_sync_')
],
],
],
Uistite sa, že hodnoty SYNC_REDIS_HOST
, SYNC_REDIS_PORT
, SYNC_REDIS_PASSWORD
sú nastavené podľa konfigurácie servera Redis, ktorý bude zdieľaný medzi aplikáciami.
V prvej aplikácii vytvorte job SynchronizeItem
a použite pripojenie "sync".
Metóda handle
nie je potrebná, pretože prvá aplikácia nebude túto úlohu spracovávať, takže sa vyžaduje, aby boli iba properties jobu rovnaké ako v druhej aplikácii.
Tu je príklad, ako by mal job vyzerať:
class SynchronizeItem implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
public function __construct(public array $data)
{
$this->onConnection('sync');
}
public function handle(): void
{
// This job is just definition, processing is made using Job class in destination Laravel Application.
}
}
V druhej aplikácii vytvorte job SynchronizeItem
a použite pripojenie "sync".
Teraz budeme definovať metódu handle
na ukladanie údajov alebo ich spracovanie v našej cieľovej aplikácii.
Uistite sa, že properties jobu sú presne rovnaké ako v jobe v prvej aplikácii.
Tu je príklad, ako by mal job vyzerať:
class SynchronizeItem implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
public function __construct(public array $data)
{
$this->onConnection('sync');
}
public function handle(): void
{
// Processing of data. For example check the type of synchronization item and dispatch event.
match($this->data['type']) {
SynchronizationType::Transaction->value => $this->processTransaction(),
}
}
protected function processTransaction(): void
{
TransactionSynchronized::dispatch($this->data);
}
}
Po napísaní jobov ho môžete odoslať pomocou metódy dispatch
na jobe v prvej aplikácii.
Konštruktor jobu dostane argumenty, ktoré boli odovzdané metóde dispatch
:
// Somewhere in your code
SynchronizeItem::dispatch([
'type' => 'Transaction',
'item' => [
'currency' => 'EUR',
'amountInCents' => 150_000,
],
]);
Synchronizačný job sa pushne do queue, ktorá používa zdielanú inštanciu Redis-u.
Po dispatch-y jobu SynchronizeItem
do queue musíme v druhej aplikácii spustiť queue worker na spracovanie synchronizačných jobov.
Pred spustením workera ho musíme definovať v našom konfiguračnom súbore config/queue.php
.
Tu je príklad, ako by mala vyzerať konfigurácia:
'connections' => [
// Other connections...
'sync' => [
'driver' => 'redis',
'connection' => 'sync', // Connection defined in database.php configuration
'queue' => env('SYNC_REDIS_QUEUE', 'default'), // You can define custom queue in job or while dispatching, for now we keep it as "default"
'retry_after' => 90,
'block_for' => null,
'after_commit' => false,
],
]
Po definovaní synchronizačnej queue v druhej aplikácii môžeme spustiť proces queue workera.
php artisan queue:work sync
Tento príkaz spustí queue worker, ktorý počúva "default" queue na spojení "sync" a spracováva joby odoslané do nej z prvej aplikácie.
V tomto príspevku sme sa venovali tomu, ako nakonfigurovať dve aplikácie Laravel tak, aby sa pripojili k jednej inštancii Redis a používali ju na odosielanie a spracovanie synchronizačných úloh.
Dodržiavaním uvedených krokov môžete zabezpečiť bezproblémovú komunikáciu medzi aplikáciami Laravel a využiť silu Redis-u na zvýšenie výkonu a rýchlosti synchronizácii medzi aplikáciami.
Okrem toho sme sa naučili používať vlastné pripojenie ku queue a nastaviť vlastný prefix kľúčov pre Redis, aby sa zachovala izolácia od ostatných queue.
Dúfame, že vám tento príspevok pomôže pri vytváraní efektívnych a synchronizovaných aplikácií v Laraveli.
Laravel Dokumentácia: Queues
Laravel Dokumentácia: Redis
Ste pripravení začať realizovať svoj podnikateľský nápad? Kontaktujte nás a my sa postaráme o všetko ostatné.