商汇粹外网资源平台

搜索
查看: 3357|回复: 5

rabbitmq 用php如何实现延时消息?

[复制链接]

该用户从未签到

5

主题

28

帖子

102

积分

注册会员

Rank: 2

积分
102
发表于 2022-9-21 20:29:05 | 显示全部楼层 |阅读模式
1.AMQP和RabbitMQ本身没有直接支持延迟队列功能,但是可以通过以下特性模拟出延迟队列的功能;
2.RabbitMQ可以针对Queue和Message设置 x-message-tt,来控制消息的生存时间,如果超时,则消息变为dead letter;
3.RabbitMQ的Queue可以配置x-dead-letter-exchange 和x-dead-letter-routing-key(可选)两个参数,用来控制队列内出现了dead letter,则按照这两个参数重新路由;

请问用PHP如何实现????
回复

使用道具 举报

该用户从未签到

8

主题

59

帖子

179

积分

注册会员

Rank: 2

积分
179
发表于 2022-9-21 20:37:25 | 显示全部楼层
最新版已经支持延迟队列,另外可以用beanstalkd,它也支持延迟队列
回复

使用道具 举报

该用户从未签到

1

主题

6

帖子

30

积分

新手上路

Rank: 1

积分
30
发表于 2022-9-21 21:02:25 | 显示全部楼层
其实这个问题 跟语言无关 呵呵
举个栗子:
对列A 要求实现延时  我们创建 队列 A  路由Key:route_keya 队列delay_A 路由Key:delay_route_keya  并且设置x-dead-letter-exchange 为A所在 exchange  设置x-dead-letter-routing-key 为 route_keya
发送消息时 发现要延时的 往 delay_route_keya 发布 设置消息生成周期为 延时时间 注意单位毫秒(如果要指定将来的发送时间 实际就是延时 willtime - timenow)
不需要延时的 直接往 route_keya 发布
消费端监听 队列A就ok    测试过1000w左右的延时消息 基本没问题(消费获取消息打印出来) 同时用 php 和python试过
回复

使用道具 举报

该用户从未签到

11

主题

43

帖子

156

积分

注册会员

Rank: 2

积分
156
发表于 2022-9-21 21:10:45 | 显示全部楼层
你指出的两点不能运用到实际的场景中,我现在用java来实现这个模块,不仅提供延迟发送,可以直接指定发送时间,同时提供查询的功能,供业务方调用
回复

使用道具 举报

该用户从未签到

4

主题

16

帖子

65

积分

注册会员

Rank: 2

积分
65
发表于 2022-9-21 21:19:05 | 显示全部楼层
感觉你问的应该是客户端服务(soa架构的后端服务,不是真正意义的客户端)是php写的,然后如何实现一个延时队列服务供客户端服务直接调用吧。
所以这里应该有两点
1,实现延时队列服务
这是我司延时队列的设计方案,希望对你有所帮助
http://tech.youzan.com/queuing_delay2,php需要自己封装一个对应延时队列的接口方便工程调用
回复

使用道具 举报

该用户从未签到

5

主题

54

帖子

197

积分

注册会员

Rank: 2

积分
197
发表于 2022-9-21 21:27:25 | 显示全部楼层
RabbitMQ是流行的开源消息队列系统,用erlang语言开发,RabbitMQ是AMQP(高级消息队列协议)的标准实现。采用该技术,我们可以实现异步处理、流量削峰、系统解耦;本课程将讲授RabbitMQ的环境搭建、消息的发送与接收、消息确认、与SpringBoot集成等,让大家快速掌握RabbitMQ技术,以适应项目开发的需要;
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表