rabbitmq 消费者和生产者模型中,生产者如何确认消费者消费了消息呢

2019-11-13 16:36:25 +08:00
 Acoolda
rabbitmq 中有 ack 确认,但是这只是让 rabbitmq 知道自己队列的消息被消费,生产者好像没办法知道,目前我自己用比较土的办法实现的,有没有 rabbitmq 自带的机制实现
我用的 pika
7767 次点击
所在节点    Python
32 条回复
jyounn
2019-11-13 16:45:27 +08:00
RocketMQ 的话,消费者会把消费结果返回给 broker,broker 会转给生产者.当然这个是异步的.rabbitmq 没用过.
Acoolda
2019-11-13 17:05:06 +08:00
OK,应该是有类似的机制,我再查查,thank you
Acoolda
2019-11-13 17:05:32 +08:00
OK,应该是有类似的机制,我再查查,thank you

@jyounn
BBCCBB
2019-11-13 17:13:56 +08:00
消费者消费后调生产者的接口告诉他你已经消费了?
learnzpk
2019-11-13 17:20:18 +08:00
消费者消费后后写 redis,生产者如果想知道是否消费拿消息 id 去 redis 里查。
lostinyou
2019-11-13 17:35:14 +08:00
生产者生产时消息数据入库,并进行状态标记,如:未消费,消费者进行消费以后标记为已消费,消费失败,标记为消费失败,然后可以有定时器查找入库的消息数据,消费失败的数据重新再次进行生产,也可以对数据进行消费失败次数限制,假如失败 5 次以后,就不再对这条消息进行生产了,然后可以通知管理人员,检查该数据,消费失败原因,如有需要手动进行生产
lhx2008
2019-11-13 17:38:00 +08:00
消费者再推一条信息上去不就行啦。。
Vegetable
2019-11-13 17:44:21 +08:00
这逻辑有点奇怪
消费者为什么一定要知道消息消费完成呢?消费完成后的逻辑按理说应该设计成和生产者逻辑隔离的,生产者不关注消息消费才对。如果需要在消费之后做其他的事情,也可以像#7 说的再发一条通知,其他的消费者继续处理,形成一个链路。
lihongjie0209
2019-11-13 17:46:19 +08:00
fire and forget
coer
2019-11-13 17:56:22 +08:00
rabbit mq 应该不自带这种机制,我当时就也是用的楼上的方法,消息入库标记状态
braveheart7854
2019-11-13 18:51:13 +08:00
你看下 rabbitmq 的 rqc 能否解决你的问题
Raymon111111
2019-11-13 19:02:13 +08:00
感觉你想要的是 rpc 而不是 mq
lalalla
2019-11-13 23:19:54 +08:00
可以用 rabbitmq 实现 RPC,实时回调
lalalla
2019-11-13 23:21:08 +08:00
@lalalla 写错了,不是实时回调。。。实时得到结果。。。
xuanbg
2019-11-14 07:14:34 +08:00
消费完推一个数据到另一个队列里面让生产者去消费不就行了吗
AngryMagikarp
2019-11-14 07:16:17 +08:00
生产者一般不需要知道这个吧,如果要知道用 RPC 调用不是更好吗。

如果要知道处理结果,又不想同步调用,那可以在业务层做处理。比如处理了一个订单数据,订单的状态会变,在某个时刻生产者去检查订单状态就好了。
Aruforce
2019-11-14 08:29:13 +08:00
感觉你说的像是事务消息…这个消息是否消费成功也是由来 broker 回调生产者来通知的…
Aruforce
2019-11-14 08:31:22 +08:00
@Aruforce 但是生产者不应该知道这个结果…
Acoolda
2019-11-14 08:33:05 +08:00
发送邮件这一类业务无需知道结果如何,但是我们这边这个业务是,任务很费时,但用户也希望知道结果,前端会一直展示一个任务执行进度条给用户
Acoolda
2019-11-14 08:36:20 +08:00
@BBCCBB 我目前是这么做的,每消费完一次任务,消费者就发一条消费完成通知给生产者,方便生产线知晓目前任务执行进度

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/619194

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX