订阅-基于事件的邮件

wztqucjr  于 2021-06-09  发布在  Redis
关注(0)|答案(1)|浏览(321)

我想经常将消息从python组件发布到redis服务器。然后,在另一个也可以访问redis服务器的php组件中,我想根据redis中存储的消息向用户发送电子邮件。如果我没有错的话,有两种方法:推拉和推-推设计:
拉力设计
php组件经常向redis服务器发出请求,当出现新消息时,执行该操作。
推送设计:
我们不需要频繁地从php组件发出这些请求:每当redis中发布新消息时,就可以触发php组件的操作。
我的问题
我们如何实现推-推设计?当我阅读关于pub子模型的redis文档时,我没有找到任何关于它的信息。所以我真的不明白我们如何触发一个动作,以另一种方式,然后频繁地向redis服务器发出请求。

fgw7neuy

fgw7neuy1#

您需要使用诸如 nohup , supervisor 或者 upstart . 这个进程将继续作为守护进程使用您的redis channel . python将继续生产,php将继续消费。
有几个库可以作为守护进程运行php进程,比如reactphp,或者如果您使用的是laravel之类的框架,那么它提供了一个很好的pub/sub接口。
它将是这样的东西;
php部分将 subscribemychannel ```
127.0.0.1:6379> SUBSCRIBE mychannel
Reading messages... (press Ctrl-C to quit)

  1. "subscribe"
  2. "mychannel"
  3. (integer) 1
Python会的 `publish` 至 `mychannel` ```
127.0.0.1:6379> publish mychannel myemailjson
(integer) 1
127.0.0.1:6379> publish mychannel myanotheremailjson
(integer) 1
127.0.0.1:6379>

同时,您的php进程将收到这些消息

1) "message"
2) "mychannel"
3) "myemailjson"
1) "message"
2) "mychannel"
3) "myanotheremailjson"

在那里面 subscriber php进程每当收到消息时,您将调用/触发/分派您的电子邮件传递作业(可能是异步的)。

相关问题