希望高人讲解一下Event、Job、Notification的区别、优劣势、应用场景。

希望高人讲解一下Event、Job、Notification的区别、优劣势、应用场景。

《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
最佳答案

Event 事件 job 任务 Notification 通知
1、Event 事件
订单支付举例 :
当前用户支付成功 这个一个事件 、一般 订单支付成功后 会进行很多不一样的操作、通知仓库发货、通知用户支付成功等,之后 可能会添加其他的操作 如:商品订单统计,风控数据推送等等。如何实现解耦和和扩展性就可以用到事件、监听器系统来完成。
先定义订单支付成功事件
当支付成功后 触发这个时间 event( new OrderPaidEvent($order) );
监听器
OrderPaidEvent::class =>[
仓库发货服务监听器,
用户通知服务监听器,
],
这样话 就不需要修改之前的代码, 只需要 增加对订单支付成功的事件监听就可以实现商品订单统计,风控数据推送 等功能
OrderPaidEvent::class =>[
仓库发货服务监听器,
用户通知服务监听器,
商品订单统计服务监听器,
风控数据推送 服务监听器,
],

2、 job 任务
刚才 的 用户通知 可能会用户邮件 通知 ,如果 同步执行 的话 ,用户支付成功后的页面响应就比较慢、就可以把一些耗时的任务 推送到 队列异步去执行。具体的文档说的很清楚

3、Notification 通知服务
这个是一个组件功能
刚才说的 订单支付成功可以邮件通知
而这个组件 可以实现 一个通知 多个渠道去推送
短信、电话、邮件、站内信、微信、支付宝 等等 。可仔细读读文档

4年前 评论
讨论数量: 5

Event 事件 job 任务 Notification 通知
1、Event 事件
订单支付举例 :
当前用户支付成功 这个一个事件 、一般 订单支付成功后 会进行很多不一样的操作、通知仓库发货、通知用户支付成功等,之后 可能会添加其他的操作 如:商品订单统计,风控数据推送等等。如何实现解耦和和扩展性就可以用到事件、监听器系统来完成。
先定义订单支付成功事件
当支付成功后 触发这个时间 event( new OrderPaidEvent($order) );
监听器
OrderPaidEvent::class =>[
仓库发货服务监听器,
用户通知服务监听器,
],
这样话 就不需要修改之前的代码, 只需要 增加对订单支付成功的事件监听就可以实现商品订单统计,风控数据推送 等功能
OrderPaidEvent::class =>[
仓库发货服务监听器,
用户通知服务监听器,
商品订单统计服务监听器,
风控数据推送 服务监听器,
],

2、 job 任务
刚才 的 用户通知 可能会用户邮件 通知 ,如果 同步执行 的话 ,用户支付成功后的页面响应就比较慢、就可以把一些耗时的任务 推送到 队列异步去执行。具体的文档说的很清楚

3、Notification 通知服务
这个是一个组件功能
刚才说的 订单支付成功可以邮件通知
而这个组件 可以实现 一个通知 多个渠道去推送
短信、电话、邮件、站内信、微信、支付宝 等等 。可仔细读读文档

4年前 评论

不一样的东西,无法说区别

4年前 评论

首先这三者是可以相互协作的,你可以在 Controller 里 Dispatch 一个 Job,也可以在 Event 里去 Dispatch 一个 Job。而 Notification 是可以作为 Job 来异步推送的。

下面来说说 Event 的场景: 比如订单模块,负责创建订单,和通知卖家。当这个订单模块在项目中多个地方使用,如果我们直接在控制器层分发用于通知卖家的任务,那么需要在用到相同逻辑的地方都写一遍。但如果采用 Event,只需要配置Event并实现订阅 Event 的消费逻辑,在整个项目中无论有多少个业务逻辑要用到,只写这一遍代码就可以了,简单来说就是更好的抽象和解耦!

Job 也可以用于分离公共逻辑,用于处理耗时任务,同时对于高并发业务有着削峰填谷的作用。

以上是我个人对于这些模块的理解,不对的地方还请指点。 :hear_no_evil:

4年前 评论

Event 事件 job 任务 Notification 通知
1、Event 事件
订单支付举例 :
当前用户支付成功 这个一个事件 、一般 订单支付成功后 会进行很多不一样的操作、通知仓库发货、通知用户支付成功等,之后 可能会添加其他的操作 如:商品订单统计,风控数据推送等等。如何实现解耦和和扩展性就可以用到事件、监听器系统来完成。
先定义订单支付成功事件
当支付成功后 触发这个时间 event( new OrderPaidEvent($order) );
监听器
OrderPaidEvent::class =>[
仓库发货服务监听器,
用户通知服务监听器,
],
这样话 就不需要修改之前的代码, 只需要 增加对订单支付成功的事件监听就可以实现商品订单统计,风控数据推送 等功能
OrderPaidEvent::class =>[
仓库发货服务监听器,
用户通知服务监听器,
商品订单统计服务监听器,
风控数据推送 服务监听器,
],

2、 job 任务
刚才 的 用户通知 可能会用户邮件 通知 ,如果 同步执行 的话 ,用户支付成功后的页面响应就比较慢、就可以把一些耗时的任务 推送到 队列异步去执行。具体的文档说的很清楚

3、Notification 通知服务
这个是一个组件功能
刚才说的 订单支付成功可以邮件通知
而这个组件 可以实现 一个通知 多个渠道去推送
短信、电话、邮件、站内信、微信、支付宝 等等 。可仔细读读文档

4年前 评论

这几个没有同向比较性吧,就扯一下业务场景吧。关键词:Event:解耦、Job:异步、Notification:发送消息。

假设系统的支付在多个地方实现了(就是举个栗子),现在需要在支付成功后:1.发送邮件通知用户,2.记录支付日志,这个时候可以考虑创建一个支付成功的Event,然后创建两个监听者1.发送邮件2.记录日志并监听支付成功Event,这样做的好处在于下次添加了个需求说要在支付成功后通知销售,只需要添加一个通知销售的监听者即可,不需要修改主业务逻辑代码,也就是说添加新的业务逻辑不会对原业务逻辑造成的破坏而引入BUG。

上面的场景中,发送邮件通知用户,发送邮件往往是一个耗时很长、时效性要求低、又不影响主业务的功能,这时候可以用队列来实现,创建JOB类,将发送邮件任务分配到JOB上,在后台新建进程来消费任务发送邮件,目的是为了主业务可以更快的响应。

然后是发送邮件这个功能,可以说是"通知"的一个实现,可以使用Notification来发送邮件通知,使用Notification主要有两个好处吧,1.框架封装好了邮件通知的基本功能,可以快速接入实现 2.当需要将通知修改短信通知时可以比较快的切换。

4年前 评论
Shadow12345 4年前

举个栗子:Event创造监听器,监听订单支付成功,创建一个Job,使用异步队列通知消费者,通知我们可以使用Notification,即:Event->Job->Notification

4年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!