


Dieser Artikel bietet Ihnen eine Einführung in die Verwendung von Warteschlangen im Laravel-Framework (mit Code). Ich hoffe, dass er für Freunde hilfreich ist.
In der tatsächlichen Projektentwicklung stoßen wir häufig auf Situationen, in denen leichte Warteschlangen erforderlich sind, z. B. das Senden von Textnachrichten, das Senden von E-Mails usw. Diese Aufgaben reichen nicht aus, um schwere Nachrichtenwarteschlangen wie Kafka und RabbitMQ zu verwenden, aber Und es erfordert Funktionen wie Asynchronität, Wiederholung und Parallelitätskontrolle. Im Allgemeinen verwenden wir Redis, Beanstalk und Amazon SQS, um verwandte Funktionen zu implementieren. In diesem Artikel werden die am häufigsten verwendeten Redis-Warteschlangen vorgestellt.
Bevor wir den Warteschlangendienst von Laravel erklären, müssen wir zunächst über den auf Redis basierenden Warteschlangendienst sprechen. Erstens ist Redis für das Caching konzipiert, kann aber aufgrund einiger seiner eigenen Eigenschaften für Nachrichtenwarteschlangen verwendet werden
Redis-Warteschlangendatenstruktur
Verknüpfte Liste auflisten
Die Nachrichtenwarteschlangenfunktionen von Redis wie FIFO (First In, First Out) sind einfach zu implementieren. Sie benötigen lediglich ein Listenobjekt, um Daten vom Anfang abzurufen und Daten vom Ende zu stopfen.
Verwandte Befehle: (1) Links rein und rechts raus: lpush/rpop (2) Rechts rein und links raus: rpush/lpop.
Diese einfache Nachrichtenwarteschlange ist einfach zu implementieren.
Zset Ordered Set
Einige Aufgabenszenarien erfordern nicht, dass die Aufgabe sofort ausgeführt wird, aber einige Aufgaben sind sehr wichtig und müssen wiederholt werden, wenn die Aufgabe fehlschlägt. Diese Funktionen können nicht allein durch die Verwendung von Listen erreicht werden. Zu diesem Zeitpunkt ist eine geordnete Sammlung von Redis erforderlich.
Der geordnete Redis-Satz ähnelt dem Redis-Satz. Es handelt sich um eine Sammlung, die nicht dieselbe Zeichenfolge enthält. Der Unterschied zwischen ihnen besteht darin, dass jedem Mitglied der geordneten Menge eine Bewertung zugeordnet ist, anhand derer die Mitglieder der geordneten Menge von der niedrigsten zur höchsten Bewertung eingestuft werden.
Wenn man nur den geordneten Satz und die verzögerten Aufgaben betrachtet, gibt es keinen Zusammenhang, aber Sie können die Punktzahl des geordneten Satzes auf den Zeitpunkt festlegen, zu dem die verzögerte Aufgabe gestartet wird, und dann den geordneten Satz abfragen, um die abzurufen Abgelaufene Aufgaben kommen zur Verarbeitung heraus und erkennen so die Funktion, Aufgaben zu verzögern.
Bei wichtigen Aufgaben, die wiederholt werden müssen, wird die Aufgabe vor ihrer Ausführung in eine geordnete Sammlung aufgenommen und die längste Ausführungszeit der Aufgabe festgelegt. Wenn die Aufgabe erfolgreich ausgeführt wird, wird die Aufgabe aus der geordneten Sammlung gelöscht. Wenn die Aufgabe nicht innerhalb der angegebenen Zeit abgeschlossen wird, werden die Aufgaben im geordneten Satz wieder in die Warteschlange gestellt.
Verwandte Befehle:
(1) ZADD Fügt ein oder mehrere Mitglieder zu einem geordneten Satz hinzu oder aktualisiert seine Punktzahl, wenn er bereits vorhanden ist.
(2) ZRANGEBYSCORE Gibt einen geordneten Satz von Mitgliedsbereichen nach Punktzahl zurück.
(3) ZREMRANGEBYRANK Entfernt alle Mitglieder aus einer geordneten Menge innerhalb des angegebenen Index.
Aufgabenplanung des Laravel-Warteschlangendienstes
Der Aufgabenplanungsprozess des Warteschlangendienstes ist wie folgt:
Laravels Warteschlangendienst besteht aus zwei Es gibt zwei Prozesssteuerungen, eine ist der Produzent und die andere ist der Verbraucher. Diese beiden Prozesse manipulieren drei Redis-Warteschlangen, von denen eine List für unmittelbare Aufgaben und zwei Zsets für verzögerte und ausstehende Aufgaben zuständig ist.
Der Produzent ist dafür verantwortlich, Aufgaben an Redis zu senden. Wenn es sich um eine sofortige Aufgabe handelt, wird sie standardmäßig in die Warteschlange gestellt. Wenn es sich um eine verzögerte Aufgabe handelt, wird sie in die Warteschlange gestellt: Standard. verzögert.
Der Verbraucher fragt zwei Warteschlangen ab, entnimmt kontinuierlich Aufgaben aus der Warteschlange, stellt die Aufgaben zunächst in queue:default:reserved ein und führt dann verwandte Aufgaben aus. Wenn die Aufgabe erfolgreich ausgeführt wird, wird die Aufgabe in queue:default:reserved gelöscht, andernfalls wird sie wieder in die Warteschlange queue:default:delayed gestellt.
Der Gesamtprozess des Laravel-Warteschlangendienstes
Aufgabenverteilungsprozess:
Aufgabenprozessorbetrieb:
Aufgabe erstellen
Warteschlangeneinstellungen
'redis' => [ 'driver' => 'redis', 'connection' => 'default', 'queue' => 'default', 'retry_after' => 90, ],
In config/queue.php konfigurieren
Im Allgemeinen ist die Standard-Redis-Konfiguration Wie oben, Verbindung ist der Verbindungsname von Redis in der Datenbank. Beachten Sie, dass Sie bei Verwendung eines Redis-Clusters das Schlüssel-Hash-Tag verwenden müssen Läuft über retry_after hinaus. Nach dieser Zeit wird die Aufgabe wieder in die Warteschlange gestellt.
Erstellung der Aufgabenklasse
Die Struktur der Aufgabenklasse ist sehr einfach, sie enthält im Allgemeinen nur eine Handle-Methode, die die Warteschlange zum Aufrufen dieser Aufgabe verwendet.
Wenn Sie möchten, dass Aufgaben in die Warteschlange verschoben und nicht synchron ausgeführt werden, müssen Sie die IlluminateContractsQueueShouldQueue-Schnittstelle implementieren.
Wenn Sie Aufgaben an eine bestimmte Verbindung senden möchten, z. B. Redis oder Sqs, müssen Sie die Verbindungsvariable festlegen.
Wenn Sie die Aufgabe in eine bestimmte Warteschlange verschieben möchten, können Sie die Warteschlangenvariable festlegen.
如果想要让任务延迟推送,那么需要设置 delay 变量。
如果想要设置任务至多重试的次数,可以使用 tries 变量;
如果想要设置任务可以运行的最大秒数,那么可以使用 timeout 参数。
如果想要手动访问队列,可以使用 trait : IlluminateQueueInteractsWithQueue。
任务的分发
分发服务
写好任务类后,就能通过 dispatch 辅助函数来分发它了。唯一需要传递给 dispatch 的参数是这个任务类的实例:
class PodcastController extends Controller { public function store(Request $request) { // 创建播客... ProcessPodcast::dispatch($podcast); } }
如果想延迟执行一个队列中的任务,可以用任务实例的 delay 方法。
ProcessPodcast::dispatch($podcast) ->delay(Carbon::now()->addMinutes(10));
通过推送任务到不同的队列,可以给队列任务分类,甚至可以控制给不同的队列分配多少任务。要指定队列的话,就调用任务实例的 onQueue 方法:
ProcessPodcast::dispatch($podcast)->onQueue('processing');
如果使用了多个队列连接,可以将任务推到指定连接。要指定连接的话,可以在分发任务的时候使用 onConnection 方法:
ProcessPodcast::dispatch($podcast)->onConnection('redis ');
Das obige ist der detaillierte Inhalt vonEinführung in die Verwendung von Warteschlangen im Laravel-Framework (mit Code). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

本篇文章给大家带来了关于laravel的相关知识,其中主要介绍了关于单点登录的相关问题,单点登录是指在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于laravel的相关知识,其中主要介绍了关于Laravel的生命周期相关问题,Laravel 的生命周期从public\index.php开始,从public\index.php结束,希望对大家有帮助。

在laravel中,guard是一个用于用户认证的插件;guard的作用就是处理认证判断每一个请求,从数据库中读取数据和用户输入的对比,调用是否登录过或者允许通过的,并且Guard能非常灵活的构建一套自己的认证体系。

laravel中asset()方法的用法:1、用于引入静态文件,语法为“src="{{asset(‘需要引入的文件路径’)}}"”;2、用于给当前请求的scheme前端资源生成一个url,语法为“$url = asset('前端资源')”。

本篇文章给大家带来了关于laravel的相关知识,其中主要介绍了关于中间件的相关问题,包括了什么是中间件、自定义中间件等等,中间件为过滤进入应用的 HTTP 请求提供了一套便利的机制,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于laravel的相关知识,其中主要介绍了关于使用中间件记录用户请求日志的相关问题,包括了创建中间件、注册中间件、记录用户访问等等内容,下面一起来看一下,希望对大家有帮助。

在laravel中,fill方法是一个给Eloquent实例赋值属性的方法,该方法可以理解为用于过滤前端传输过来的与模型中对应的多余字段;当调用该方法时,会先去检测当前Model的状态,根据fillable数组的设置,Model会处于不同的状态。

laravel路由文件在“routes”目录里。Laravel中所有的路由文件定义在routes目录下,它里面的内容会自动被框架加载;该目录下默认有四个路由文件用于给不同的入口使用:web.php、api.php、console.php等。


Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Dreamweaver Mac
Visuelle Webentwicklungstools

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

SublimeText3 Englische Version
Empfohlen: Win-Version, unterstützt Code-Eingabeaufforderungen!

DVWA
Damn Vulnerable Web App (DVWA) ist eine PHP/MySQL-Webanwendung, die sehr anfällig ist. Seine Hauptziele bestehen darin, Sicherheitsexperten dabei zu helfen, ihre Fähigkeiten und Tools in einem rechtlichen Umfeld zu testen, Webentwicklern dabei zu helfen, den Prozess der Sicherung von Webanwendungen besser zu verstehen, und Lehrern/Schülern dabei zu helfen, in einer Unterrichtsumgebung Webanwendungen zu lehren/lernen Sicherheit. Das Ziel von DVWA besteht darin, einige der häufigsten Web-Schwachstellen über eine einfache und unkomplizierte Benutzeroberfläche mit unterschiedlichen Schwierigkeitsgraden zu üben. Bitte beachten Sie, dass diese Software
