同一台服务器配置多个laravel项目,队列都是默认配置,出现互串的问题

同一台服务器配置了多个laravel项目(laravel8),使用horizon管理,出现了队列任务互串的问题,我该如何配置每个项目的队列,让队列任务不再互串呢?
感谢大家!

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

关注学习 坐等大佬

2年前 评论
Mumujin
  1. 在config 配置多个queue
  2. 如果出现相同名字可用prefix
2年前 评论
张汉为 (楼主) 2年前

redis配置不同的数据库呗

2年前 评论
张汉为 (楼主) 2年前
李铭昕 2年前

hor那个需要配置独立库和独立前缀,避免cache 缓存错误

2年前 评论

你在 VUE_APP 用不同名字,隊列 會自動加前綴 ,不會串的吧。

2年前 评论

修改 config/queue.php文件,设置不同的 connection 就可以了。

2年前 评论
张汉为 (楼主) 2年前

不同的项目把 env 中的 app_name 设置不同的值

2年前 评论

一般来说你把env中的APP_NAME改一下的话就不会这样啊,生成的redis的前缀就不一样了
如果是用redis的话,config下面的queue.connections.redis.connection换个链接试试,我猜的

'redis' => [
            'driver'      => 'redis',
            'connection'  => 'default',//每个项目配置个databases.redis,用不同的redis库
            'queue'       => env('REDIS_QUEUE', 'default'),
            'retry_after' => 90,
            'block_for'   => null,
        ]
2年前 评论
张汉为 (楼主) 2年前
sharejia 2年前

配置不同的redis信息,或者根据项目加一个前缀标示。

2年前 评论

每个项目里的 .env 里的 REDIS_QUEUE 设置不同的名字 比如你设置的 REDIS_QUEUE=xiangmu 运行队列监听的命令时 后面加上 redis --queue=xiangmu 比如: php artisan queue:work redis --queue=xiangmu 多个项目 每个项目启动不同的队列监听就行了

2年前 评论
张汉为 (楼主) 2年前

不是有 onQueue指定么,horizon 里面也有对应的配置,配置一下就好了,我们公司就在这么玩儿,但是吧挺别扭就是了

2年前 评论

一个 prefix 应该可以搞定,,,具体搜下配置文件中的 prefix,,,

2年前 评论
张汉为 (楼主) 2年前
largezhou (作者) 2年前
张汉为 (楼主) 2年前

配置多个队列的prefix呀!

2年前 评论
张汉为 (楼主) 2年前
giao哥

不同的服务器访问不同redis db 不就行了, A/B/C服务器分别对应db1,db2,db3。这样哪里不适合了呢?

2年前 评论

链式连接 & 队列 如果你想指定应该用于已连接任务的默认连接和队列,可以使用 allOnConnection 和 allOnQueue 方法。这些方法指定了应该使用的队列连接和队列名称,除非队列任务被显式地分配了一个不同的连接 / 队列: redis 连接 /podcasts 队列

Bus::chain([
    new ProcessPodcast,
    new OptimizePodcast,
    new ReleasePodcast,
])->dispatch()->allOnConnection('redis')->allOnQueue('podcasts');
2年前 评论

aravel 中队列任务使用 redis 驱动情况下保存的时候的缓存 key 是不带前缀的,比如 A 项目 dispatch 了一个 a job,保存在了 queues:default,然后我们去 B 项目 dispatch 另一个 job,我们发现它们保存在了相同的 redis key 中

这样会导致的问题是:在一个项目中跑 php artisan queue:work 会拿到另外一个项目的 job,这样就会导致一些不必要的异常,因为在反序列化的过程中会找不到对应的类。

原因:config/queue.php 中配置的默认 queue 都是 default:

为 job 指定不同的 queue,如 dispatch job 的时候可以 dispatch((new xxJob())->onQueue('xxQueue')),这样一来,job 就保存在了 queues:xxQueue 中,但是还是得注意,如果还有其他项目,不要取相同名字。同时,这样一来,我们的 queue:work 或者 queu:listen 命令也要加上 --queue 参数了,如 php artisan queue:work --queue=testQueue,否则还是会去 queues:default 里面找

2年前 评论

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