安装

php bin/hyperf.php hcms:install message

定义消息

我们将所有的消息定义放在 App\Application\Message\Message

  • 属性:可以将消息已经确定属性在 SimpleMessage 定义的时候就确认,例如 $target_type 消息来源类型、$receiver_type 接收者类型。提前定义好这些属性,在创建消息的时候就不需要再次赋值。
  • 发送器:一条消息可以对应多个发送器执行发送。 ```php <?php declare(strict_types=1);

namespace App\Application\Message\Message;

class SimpleMessage extends AbstractMessage { protected string $target_type = ‘simple_id’; protected string $receiver_type = ‘user_id’; protected string $sender_type = ‘send_id’; protected string $title = ‘简单消息通知’;

function getSenders(): array { //返回对应的发送器 return [ SimpleMessageWxSender::class, ]; } }

  1. <a name="wLpwG"></a>
  2. ## 创建消息
  3. 在特定的触发场景创建对应的消息,因为定义消息的时候提前确定一些消息属性,随意创建消息的时候只需要对特定属性赋值就可以。
  4. ```php
  5. public function createMessage()
  6. {
  7. $message = new SimpleMessage();
  8. $res = $message->setContent('创建一条简单的消息通知')
  9. ->setReceiver(1)
  10. ->setSender(2)
  11. ->setTarget(3)
  12. ->createMessage();
  13. return $res ? $this->returnSuccessJson() : $this->returnErrorJson();
  14. }

消息发送器

发送器就是用来执行消息发送操作,因为一个通知消息可以对应多种发送行为,例如银行支付通知,可以发送微信公众号、短信、邮箱等。
发送器需要在消息定义时在 getSenders 中返回。

  1. function getSenders(): array
  2. {
  3. return [
  4. SimpleMessageWxSender::class,
  5. SimpleMessageErrorSender::class,
  6. SimpleMessageSmsSender::class
  7. ];
  8. }

消息发送

每个消息创建成功后,都会创建一个队列任务(MessageProcessJob)执行。这个队列任务就是执行此消息的发送操作。

队列:

  • 队列任务是立即执行
  • 队列最大执行次数是3次,超过3次就不再重复执行。3次执行时间分别是0、5、300秒。

    多发送器

  • 如果有多个发送器需要执行的,默认是所有发送器都返回失败,该任务才算失败。

    发送执行记录

    image.png

    message

    对于消息发送执行结果,message表会有 执行次数(process_count)、执行状态(process_status)作为记录。

    message_error

    记录消息发送执行错误,只要某个发送器执行错误,都会有该错误日志。