Heim  >  Artikel  >  Backend-Entwicklung  >  Ausführliche Erläuterung der Verwendung von PHP mit Gearman für asynchrone E-Mail- oder SMS-Versandvorgänge

Ausführliche Erläuterung der Verwendung von PHP mit Gearman für asynchrone E-Mail- oder SMS-Versandvorgänge

coldplay.xixi
coldplay.xixinach vorne
2020-07-10 17:12:322238Durchsuche

Ausführliche Erläuterung der Verwendung von PHP mit Gearman für asynchrone E-Mail- oder SMS-Versandvorgänge

Das Beispiel in diesem Artikel beschreibt, wie PHP Gearman verwendet, um asynchrone E-Mail- oder SMS-Versandvorgänge durchzuführen. Teilen Sie es allen als Referenz mit. Die Details lauten wie folgt:

1. Vorbereitungsarbeiten

1 Um Ausfallzeiten während der Geschäftsabwicklung zu vermeiden, konfigurieren Sie bitte Gearman Persistenzmethode.
2. Verwenden Sie gearmanManager, um unsere Worker-Skripte zu verwalten und das Testen zu erleichtern.

Verwandte Lernempfehlungen: PHP-Programmierung vom Einstieg bis zur Beherrschung

2. Schreiben von Testskripten

sendEmail.phpDer Code lautet wie folgt:

<?php
//注意函数名与文件名相同
function sendEmail($job) {
  $workId = uniqid();

  //workload()获取客户端发送来的序列化数据
  $data = json_decode($job->workload(), true);
  
  //这里模拟处理过程
  //具体的业务,这里应该是请求发送邮件的接口,这里只做演示
  sleep(1);
  
  echo "workId: {$workId} 发送 {$data[&#39;email&#39;]} 成功\n";
}

client.phpDer Code lautet wie folgt:

<?php
//创建一个客户端
$client = new GearmanClient();
//添加一个job服务
$client->addServer(&#39;127.0.0.1&#39;, 4730);

$cnt = 5000;
$ret = array();

//循环发送5000条邮件
for($i = 0; $i < $cnt; ++$i) {
  //doBackground异步,返回提交任务的句柄
  $ret[$i] = $client->doBackground(&#39;sendEmail&#39;, json_encode(array(
    &#39;email&#39; => "{$i}@qq.com",
    &#39;title&#39; => "邮件标题{$i}",
    &#39;body&#39; => "我是内容{$i}",
  )));
}

3. Ändern Sie die Konfigurationsinformationen im GearmanManager

Mein GearmanManager ist unter /data/GearmanManager/ installiert

> vi /data/GearmanManager/etc/GearmanManager.ini

Fügen Sie die folgenden Informationen hinzu, wir starten fünf Prozesse für sendEmail

[sendEmail]
;指定5个进程
dedicated_count=5
;5个进程都只做sendEmail工作
dedicated_only=1

4. Starten Sie Gearman

> gearmand -d -q mysql \
--mysql-host=192.168.1.100 \
--mysql-port=3306 \
--mysql-user=gearman \
--mysql-password=123456 \
--mysql-db=gearman \
--mysql-table=gearman_queue &

5. Starten Sie gearmanManager

> cd /data/GearmanManager
> ./bin/pecl_manager.php -c /data/GearmanManager/etc/GearmanManager.ini -vvv

6. Führen Sie client.php

> /data/php56/bin/php /data/client.php

aus

Wenn wir Strg+C für pecl_manager.php ausführen und den Worker zwangsweise schließen, kann client.php weiterhin normal Anfragen senden, aber die Daten werden in MySQL gespeichert.
Wenn wir den Worker neu starten, lädt Gearman die unverarbeiteten zur Verarbeitung neu.


Mein MySQL ist auf der Host-Maschine installiert und Gearman ist in der virtuellen Maschine installiert. Wenn Freunde feststellen, dass Gearman keine Verbindung zu MySQL herstellen kann, können sie die Win10-Firewall vorübergehend deaktivieren Aktivieren Sie die Ping-Antwort von win10.

Das obige ist der detaillierte Inhalt vonAusführliche Erläuterung der Verwendung von PHP mit Gearman für asynchrone E-Mail- oder SMS-Versandvorgänge. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:jb51.net. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen

In Verbindung stehende Artikel

Mehr sehen