当前位置: 首页 > 知识库问答 >
问题:

在AWS SQS中实现优先级(高、中、低)(以流明为单位

王曜文
2023-03-14

如何在流明PHP中传递AWS SQS中的优先级(高、中、低)。

包件

"php": "^7.3|^8.0",
"aws/aws-sdk-php": "^3.158",
"laravel/lumen-framework": "^8.0"

queqe.php

<?php

return [
    'default' => env('QUEUE_CONNECTION', 'sqs'),

    'connections' => [
        'sqs' => [
            'driver' => 'sqs',
            'key' => 'key',
            'secret' => 'secret',
            'prefix' => 'https://sqs.us-east-1.amazonaws.com/1234567891452',
            'queue' => '',
            'suffix' => 'dev-test-app',
            'region' => 'us-east-1',
            'after_commit' => false,
        ]
    ],
];

EmailJob.php

<?php

namespace App\Jobs;

use Log;

class EmailJob extends Job
{
    public $queue;

    public function __construct($data)
    {
        $this->queue = $data['queue'];
    }

    public function handle()
    {
        Log::info('Email job '.$this->queue.' is run at start time - '.microtime(true));
    }
}

smsjob.php

<?php

namespace App\Jobs;

use Log;

class SmsJob extends Job
{
    public $queue;

    public function __construct($data)
    {
        $this->queue = $data['queue'];
    }

    public function handle()
    {
        Log::info('Sms job '.$this->queue.' is run at start time - '.microtime(true));
    }
}

添加到队列

Queue::push(new EmailJob(array('queue' => 'email-test')));
Queue::push(new SmsJob(array('queue' => 'sms-test')));

我如何设置优先级(高,中,低)的电子邮件,短信工作等。可能还会增加新的工作。

共有1个答案

潘俊楚
2023-03-14

SQS是一种简单的队列服务--不幸的是,它没有内置的优先级系统。

您必须创建多个队列。生产者将消息发送到正确的队列(高、中、低),使用者首先轮询高队列中的工作并对其进行工作。如果高队列为空,则轮询中队列,如果中队列也为空,则轮询低队列。

另外,您也可以使用Amazon MQ,它是托管的ActiveMQ或RabbitMQ,这两种MQ很可能都支持这个特性。

 类似资料:
  • 问题内容: 在Linux实时进程优先级范围为1到99的情况下,我不清楚哪个是最高优先级,即1或99。 “了解Linux内核”(O’Reilly)的7.2.2节说1是最高优先级,考虑到正常进程的静态优先级从100到139,其中100是最高优先级,这是有道理的: “每个实时过程都与一个实时优先级相关联,该优先级的值范围是1(最高优先级)到99(最低优先级)。” 另一方面,sched_setschedu

  • 在https://cadenceworkflow.io/docs/03_concepts/02_activities#activity-task-routing-through-task-lists的留档中,它提到通过每个优先级有一个任务列表和每个优先级有一个工作池来支持多个优先级。在这种实现下,可能仍然有低优先级的工作流在高优先级工作流之前执行。 是否可以实现一个优先级系统,以便在流向高优先级工

  • 我需要一个优先级队列,它首先获得具有最高优先级值的项目。我当前正在使用队列库中的PriorityQueue类。但是,这个函数只先返回值最小的项。我尝试了一些很难看的解决方案,比如(sys.maxint-priority)作为优先级,但我只是想知道是否存在更优雅的解决方案。

  • 我目前正在研究分布式应用程序的性能。我的目标是网络组件。目前,每个连接都有一个专用线程,在阻塞模式下处理套接字。我的目标是减少线程数量(不降低性能),如果可能的话,提高性能。 我重新设计了网络组件以使用异步通信,并尝试使用1到2个线程来处理整个网络。我做了一个简单的测试,我从一个节点在一个循环中写入,然后在另一个节点上读取,这是为了测试最大nw线程能力,我发现我的繁忙循环实现消耗了100%的cpu

  • 我正在编写一个涉及堆实现的代码,在我的bubbleUp方法中,在我的while循环行中,我似乎遇到了一个取消引用的错误。这可能是一个相当基本的问题,但解决这个问题的最佳方法是什么?我在实现removeHigh方法时也遇到了一些问题,该方法旨在从队列中移除最高的元素。

  • 问题内容: 我最近才发现我认为这里有些奇怪。为什么会这样,并且处于不同的优先级?我会以为他们处于同一水平。以上证明了这一点。即使从左到右的求值对第一个给出的都是假,而第二个则给出的是真,这两个陈述都是正确的。 有人知道这背后的原因吗? (顺便说一句,我只是在这里使用了很多括号,但是是旧代码提出了这个问题) 问题答案: 因为在传统的数学表示法中,(逻辑合取)的优先级高于(逻辑合取)。 出于显而易见的