afikrim/laravel-redis-stream

此包已废弃,不再维护。未建议替代包。
此包最新版本(1.1.7)没有可用的许可信息。

一个Composer库,用于在Laravel中使用Redis流作为消息代理

1.1.7 2022-01-29 11:24 UTC

This package is auto-updated.

Last update: 2023-06-29 02:03:14 UTC


README

Laravel Redis Stream是一个帮助您处理由Redis驱动的不同应用程序之间事件流的包。

此包的主要概念是提供一个简单的方法来存储您应用程序中的新事件,并在其他应用程序中消费它们。

安装

您可以使用以下命令通过composer安装此包

composer require afikrim/laravel-redis-stream

Lumen上的安装

通过composer安装包后,在bootstrap/app.php中注册一个新的服务提供者

$app->register(\Afikrim\LaravelRedisStream\LaravelRedisStreamServiceProvider::class);

注意:不要忘记取消注释门面并注册redis(请使用predis,因为它不能在phpredis中工作)

添加配置

stream添加新的redis连接

<?php
...
    'redis' => [
        ...

        'stream' => [
            'url' => env('REDIS_URL'),
            'host' => env('REDIS_HOST', '127.0.0.1'),
            'password' => env('REDIS_PASSWORD', null),
            'port' => env('REDIS_PORT', '6379'),
            'database' => env('REDIS_STREAM_DB', '3'),
            'prefix' => env('REDIS_STREAM_PREFIX', Str::slug(strtolower(config('app.env')) . '.' . strtolower(config('app.name')), '.')) . ':',
        ]
    ],
...

可用命令

此包包含三个命令:

  1. 包含stream:declare-group命令用于声明流的组
  2. 包含stream:destroy-group命令用于销毁流的组
  3. 包含stream:consume命令用于消费传入的事件

添加自定义消费处理器

您可以通过在app/Console/Commands中扩展我们的ConsumeCommand来添加自己的消费者

<?php

namespace App\Console\Commands;

use Afikrim\LaravelRedisStream\Console\ConsumeCommand as ConsoleConsumeCommand;

class ConsumeCommand extends ConsoleConsumeCommand
{
    /**
     * Function to listen to new event stream
     */
    protected function listen()
    {
        $options = [];
        if ($this->hasOption('group')) {
            $options['group'] = $this->option('group');
        }
        if ($this->hasOption('consumer')) {
            $options['consumer'] = $this->option('consumer');
        }
        if ($this->hasOption('count')) {
            $options['count'] = $this->option('count');
        }
        if ($this->hasOption('block')) {
            $options['block'] = $this->option('block');
        }
        if ($this->laravel->config->get('redis.stream.prefix')) {
            $options['prefix'] = $this->laravel->config->get('redis.stream.prefix');
        }

        $server = new TransporterServer($options);
        $server->addHandler('mystream', function ($result) {return $result;});
        $server->addHandler('mystream2', function ($result) {return $result;});
        // And another awesome handlers...
        $server->listen();
    }
}

然后,将您的自定义ConsumeCommand添加到App\Console\Kernel

protected $commands = [
    // you other command,
    \App\Console\Commands\ConsumeCommad::class
]

向流发送数据

要向流发送数据,您可以使用ClientProxy类。

发送数据并监听响应

...
use Afikrim\LaravelRedisStream\ClientProxy;

...
    $results = ClientProxy::init($options)
        ->publish('mystream2', [
            'name' => 'Aziz',
            'email' => "afikrim10@gmail.com",
        ])
        ->subscribe('mystream2', 60);
...

发送数据而不等待任何响应

...
use Afikrim\LaravelRedisStream\ClientProxy;

...
    ClientProxy::init($options)
        ->dispatch('mystream2', [
            'name' => 'Aziz',
            'email' => "afikrim10@gmail.com",
        ]);
...