Cet article présente principalement la méthode d'utilisation de la file d'attente de messages et de la file d'attente asynchrone dans le framework Laravel de PHP. Pour les versions postérieures à Laravel 5.0, l'exemple d'environnement est le système Linux. Les amis dans le besoin peuvent s'y référer
configuration de la file d'attente
Tout d'abord, laissez-moi vous expliquer comment utiliser la file d'attente dans mon projet précédent. Nos projets actuels utilisent tous symfony, les projets plus anciens utilisent symfony1.4 et les projets plus récents utilisent symfony2. La sensation générale d'utiliser symfony est très agréable, en particulier symfony2, qui utilise généralement de nombreuses idées de conception issues des frameworks Java. Mais il ne prend pas en charge la file d'attente. Dans Symfony, nous avons également parcouru plusieurs processus utilisant la file d'attente. J'ai d'abord utilisé les httpsqs de Zhang Yan. Celui-ci est simple à utiliser, mais il y a des points uniques. Après tout, notre projet sert toujours officiellement le monde extérieur, nous avons donc étudié ActiveMQ, un projet open source sous Apache, et avons découvert qu'il existe un MQ plus récent sous Apache, qui est Apollo. Finalement, nous avons décidé d'utiliser Apollo. Le principal scénario d'application de la file d'attente dans notre projet est de traiter de manière asynchrone certaines fonctions chronophages, telles que la synchronisation des données tierces, la notification synchrone à nos utilisateurs de données tiers des modifications de données, etc. Notre idée générale est la suivante : si un traitement asynchrone est nécessaire dans chaque contrôleur, encodez simplement un objet json et insérez-le dans Apollo. Écrivez une autre commande de travail, analysez l'objet json dans cette commande et appelez différentes méthodes en fonction des actions et des paramètres qu'il contient. Selon les besoins de l'entreprise, exécuter Command sur différentes machines en même temps qu'un processus démon peut également être considéré comme une solution pour implémenter des applications multitâches asynchrones. J'ai continué à l'utiliser jusqu'à ce que je découvre Laravel. Prévoyez de le rechercher. Il n'est pas impossible de le remplacer si possible. héhé. Depuis que je viens de commencer à apprendre, bien sûr, je suis allé directement sur Laravel5. Les routes, les contrôleurs et les vues sont fondamentalement les mêmes que ceux de Symfony, il n'est donc pas difficile de démarrer. Enfin, étudiez la file d’attente.1. Installer laravle et utiliser composer est très simple.
composer global require "laravel/installer=~1.1" vi ~/.bash_profile
source ~/.bash_profile
laravel -V
Laravel Installer version 1.2.1
2. Créez un projet.
laravel new guagua
3. Configurez Redis et la file d'attente.
4. Créez un contrôleur,
php artisan make:controller DefaultController
for($i = 0; $i < 100; $i ++) { Queue::push(new SendEmail("ssss".$i)); }
5. Commande pour créer une file d'attente
php artisan make:command SendEmail --queued
protected $msg;
public function __construct($msg) { $this->msg = $msg; }
public function handle() { sleep(4); echo $this->msg."\t".date("Y-m-d H:i:s")."\n"; $this->delete(); }
6. Modifier les itinéraires
Route::get('/', [ 'as' => 'index', 'uses' => 'DefaultController@index' ]);
7. Surveiller la file d'attente
php artisan queue:listen
8. Démarrez le service avec le serveur intégré de Laravel
php artisan serve --port 8080
Lorsque vous poussez la file d'attente dans l'action du contrôleur, il n'y a pas d'exécution asynchrone et elle est toujours exécutée dans le script de l'action. Il a été constaté qu'il s'agissait d'un problème de configuration. Il s'est avéré que non seulement queue.php dans config devait être modifié, mais que les configurations associées dans .evn devaient également être modifiées. Bien que le problème ait été résolu, je ressens toujours une douleur dans mes couilles et je n'arrive pas à la comprendre. Il faut encore apprendre Laravel.
Comment utiliser les files d'attente asynchrones
1. Configuration
La définition de la file d'attente ne sera pas présentée ici. . Il existe deux clés pour utiliser les files d'attente asynchrones :(1)存储队列的地方
(2)执行任务的服务
打开 config/queue.php ,这是Laravel5关于队列的配置文件。首先我们可以通过 default 参数指定默认队列驱动,默认配置是 sync , 这是同步队列,我们要做异步队列首先就要改变这里。假设我们用 database 作为驱动,队列任务将会存放在数据库中,而我们后面会另外启动一个后台服务来处理队列任务,这就是异步方式了。
'default' => 'database'
修改完配置后,我们需要创建一个表来存放队列任务,Laravel5已经在自带artisan命令中内置了一个指令用来生成数据迁移,只需要两条命令即可,当然你得实现配置好数据库连接。
php artisan queue:table php artisan migrate
这样就自动在数据库中创建了 jobs 表。
2.启动队列监听服务
通过下面这条指令启动队列监听服务,它会自动处理 jobs 表中的队列任务:
php artisan queue:listen
在linux中,如果想让它在后台执行,可以这样:
nohup php artisan queue:listen &
3.添加队列任务
关于队列任务的添加,手册里说的比较详细,这里就简单举个例子吧。
首先,通过artisan创建一个队列命令:
php artisan make:command SendEmail --queued
这样会生成 app/Commands/SendEmail.php 这个类文件,这个类会被标识为队列命令,你可以在 handle 方法中写自己的业务逻辑。
在控制器中,可以简单通过 Bus::dispatch 分发任务:
Bus::dispatch(new \App\Commands\SendEmail());
你会发现任务不会立即执行,而是被放到 jobs 表中,由队列监听服务处理。
以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网!
相关推荐:
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!