Laravel 亚马逊 MWS 后台作业最佳实践
Laravel background jobs best practice with Amazon MWS
我正在使用外部馈送 API "Amazon mws" 我为特定卖家获取所有产品。下面我说一下如果我想通过两种方式来刷新这些产品:自动和手动,自动的方式是每12小时刷新一次这家商店,手动的方式是让卖家手动点击刷新link 并进一步显示进度条,直到完成此作业。
那么,现在我怎样才能做到这两种方法呢?我对作业、队列和任务调度感到非常困惑,是使用 beanstalkd 还是 redis?
我只想有人指导我如何管理所有这些以及针对这种情况的最佳实践...谢谢 Artisans :)
我认为无法从 MWS Api 获取一个 SKU 的库存信息。当我们有类似的需求时,我们只是创建了一个 php 连接到 MWS Reports api 的脚本,专门用于 _GET_MERCHANT_LISTINGS_ALL_DATA_ 报告下载报告和 insert/update 到 mysql数据库。我们没有使用 redis 或消息队列,因为 MWS Reports api 的工作方式是您请求报告并轮询报告处理状态。成功后,将报告和过程下载到数据库中。我们已经 运行 这个 php 脚本,每 30 分钟执行一次 cron。
对于自动刷新,您可以 运行 任务调度程序(系统到系统),用户不参与,这是调度任务的完美案例。
虽然刷新按钮是一个作业,但请考虑到作业可以排队或不排队,无论是否实施 shouldQueue。如果您希望这项工作在后台完成,您可以将该工作排队等待异步完成。
然后设置一个事件,在作业完成或数据库更新时触发,您可以向用户广播通知,通知他她或团队更新已完成。
所以让我们一步一步来,你可以用 artisan 命令来做这个工作,你可以从你的控制器调度这个工作。
在作业中编写您的业务逻辑并实现shouldQueue。作业不需要 return 语句。然后使用 artisan 命令创建队列,这将创建队列 table,并将 env 中的队列驱动程序更改为数据库(您可以使用数据库队列走很长一段路,因此您不必使用 beanstalkd,这是个好方法练习队列,然后你应该 queue:listen !请注意,当你使用队列监听时,监听将保持 运行ning 直到你关闭终端,然后在 运行ning 监听之前打开终端queue:restart.
使用 artisan 创建您想要的事件,并在您的模型上监听更新的事件,更新完成后将触发该事件。
使用 artisan 命令创建通知,并在事件侦听器上创建事件通知。通知您可以自定义要通知的内容。
您需要广播此通知,为此您需要使用推送器创建一个帐户并广播该事件。
laravel 文档涵盖了所有内容,但很难知道从哪里开始。
要使用 pusher 安装 pusher 和 laravel echo 进行广播,然后在您广播的事件中,将在您的网络路由上创建一个频道,还有一些其他设置和配置,仅供参考广播并在您的前端接收一些东西只是为了测试。广播到频道而不是私人频道,如果可以的话,从那里进行设置会更容易一些。做任何你想做的事。
希望对您有所帮助。
@gustav1105 来自 laracasts
我正在使用外部馈送 API "Amazon mws" 我为特定卖家获取所有产品。下面我说一下如果我想通过两种方式来刷新这些产品:自动和手动,自动的方式是每12小时刷新一次这家商店,手动的方式是让卖家手动点击刷新link 并进一步显示进度条,直到完成此作业。
那么,现在我怎样才能做到这两种方法呢?我对作业、队列和任务调度感到非常困惑,是使用 beanstalkd 还是 redis?
我只想有人指导我如何管理所有这些以及针对这种情况的最佳实践...谢谢 Artisans :)
我认为无法从 MWS Api 获取一个 SKU 的库存信息。当我们有类似的需求时,我们只是创建了一个 php 连接到 MWS Reports api 的脚本,专门用于 _GET_MERCHANT_LISTINGS_ALL_DATA_ 报告下载报告和 insert/update 到 mysql数据库。我们没有使用 redis 或消息队列,因为 MWS Reports api 的工作方式是您请求报告并轮询报告处理状态。成功后,将报告和过程下载到数据库中。我们已经 运行 这个 php 脚本,每 30 分钟执行一次 cron。
对于自动刷新,您可以 运行 任务调度程序(系统到系统),用户不参与,这是调度任务的完美案例。
虽然刷新按钮是一个作业,但请考虑到作业可以排队或不排队,无论是否实施 shouldQueue。如果您希望这项工作在后台完成,您可以将该工作排队等待异步完成。
然后设置一个事件,在作业完成或数据库更新时触发,您可以向用户广播通知,通知他她或团队更新已完成。
所以让我们一步一步来,你可以用 artisan 命令来做这个工作,你可以从你的控制器调度这个工作。
在作业中编写您的业务逻辑并实现shouldQueue。作业不需要 return 语句。然后使用 artisan 命令创建队列,这将创建队列 table,并将 env 中的队列驱动程序更改为数据库(您可以使用数据库队列走很长一段路,因此您不必使用 beanstalkd,这是个好方法练习队列,然后你应该 queue:listen !请注意,当你使用队列监听时,监听将保持 运行ning 直到你关闭终端,然后在 运行ning 监听之前打开终端queue:restart.
使用 artisan 创建您想要的事件,并在您的模型上监听更新的事件,更新完成后将触发该事件。
使用 artisan 命令创建通知,并在事件侦听器上创建事件通知。通知您可以自定义要通知的内容。
您需要广播此通知,为此您需要使用推送器创建一个帐户并广播该事件。
laravel 文档涵盖了所有内容,但很难知道从哪里开始。
要使用 pusher 安装 pusher 和 laravel echo 进行广播,然后在您广播的事件中,将在您的网络路由上创建一个频道,还有一些其他设置和配置,仅供参考广播并在您的前端接收一些东西只是为了测试。广播到频道而不是私人频道,如果可以的话,从那里进行设置会更容易一些。做任何你想做的事。
希望对您有所帮助。 @gustav1105 来自 laracasts