1 jyounn 2019-11-13 16:45:27 +08:00 RocketMQ 的话,消费者会把消费结果返回给 broker,broker 会转给生产者.当然这个是异步的.rabbitmq 没用过. |
![]() | 2 Acoolda OP OK,应该是有类似的机制,我再查查,thank you |
![]() | 4 BBCCBB 2019-11-13 17:13:56 +08:00 消费者消费后调生产者的接口告诉他你已经消费了? |
5 learnzpk 2019-11-13 17:20:18 +08:00 消费者消费后后写 redis,生产者如果想知道是否消费拿消息 id 去 redis 里查。 |
![]() | 6 lostinyou 2019-11-13 17:35:14 +08:00 生产者生产时消息数据入库,并进行状态标记,如:未消费,消费者进行消费以后标记为已消费,消费失败,标记为消费失败,然后可以有定时器查找入库的消息数据,消费失败的数据重新再次进行生产,也可以对数据进行消费失败次数限制,假如失败 5 次以后,就不再对这条消息进行生产了,然后可以通知管理人员,检查该数据,消费失败原因,如有需要手动进行生产 |
![]() | 7 lhx2008 2019-11-13 17:38:00 +08:00 via Android 消费者再推一条信息上去不就行啦。。 |
![]() | 8 Vegetable 2019-11-13 17:44:21 +08:00 这逻辑有点奇怪 消费者为什么一定要知道消息消费完成呢?消费完成后的逻辑按理说应该设计成和生产者逻辑隔离的,生产者不关注消息消费才对。如果需要在消费之后做其他的事情,也可以像#7 说的再发一条通知,其他的消费者继续处理,形成一个链路。 |
9 lihongjie0209 2019-11-13 17:46:19 +08:00 fire and forget |
![]() | 10 coer 2019-11-13 17:56:22 +08:00 via Android rabbit mq 应该不自带这种机制,我当时就也是用的楼上的方法,消息入库标记状态 |
11 braveheart7854 2019-11-13 18:51:13 +08:00 ![]() 你看下 rabbitmq 的 rqc 能否解决你的问题 |
12 Raymon111111 2019-11-13 19:02:13 +08:00 感觉你想要的是 rpc 而不是 mq |
13 lalalla 2019-11-13 23:19:54 +08:00 ![]() 可以用 rabbitmq 实现 RPC,实时回调 |
![]() | 15 xuanbg 2019-11-14 07:14:34 +08:00 消费完推一个数据到另一个队列里面让生产者去消费不就行了吗 |
![]() | 16 AngryMagikarp 2019-11-14 07:16:17 +08:00 ![]() 生产者一般不需要知道这个吧,如果要知道用 RPC 调用不是更好吗。 如果要知道处理结果,又不想同步调用,那可以在业务层做处理。比如处理了一个订单数据,订单的状态会变,在某个时刻生产者去检查订单状态就好了。 |
![]() | 17 Aruforce 2019-11-14 08:29:13 +08:00 via Android 感觉你说的像是事务消息…这个消息是否消费成功也是由来 broker 回调生产者来通知的… |
![]() | 19 Acoolda OP 发送邮件这一类业务无需知道结果如何,但是我们这边这个业务是,任务很费时,但用户也希望知道结果,前端会一直展示一个任务执行进度条给用户 |
![]() | 20 Acoolda OP @BBCCBB 我目前是这么做的,每消费完一次任务,消费者就发一条消费完成通知给生产者,方便生产线知晓目前任务执行进度 |
![]() | 23 Acoolda OP @AngryMagikarp 理论上生产者是不需要关心,工厂里的工人不需要知道自己生产的东西市场上卖的怎样,但是老板需要知道啊,工人就是生产者,老板就是整体应用 |
![]() | 24 chengxy 2019-11-14 09:04:55 +08:00 C137 更新了 |
![]() | 25 Acoolda OP @Vegetable 鞋子工厂对外面买鞋子的消费者来说是生产者,但是工厂里面只有流水线工人才是正真的生产者,工厂里面还有老板,流水线工人不用关心市场上鞋子卖的怎么样,但是老板需要及时知道鞋子在市场上卖的怎么样?买鞋的人怎么评价这个鞋子 |
![]() | 26 p1094358629 2019-11-14 09:11:47 +08:00 可以再封装,其实就是 消费者放出一个回调函数,我司基于这个原理封装了框架 |
![]() | 27 kkkkkrua 2019-11-14 09:19:21 +08:00 其实就是 rpc..只是这个过程异步化了 |
![]() | 28 min 2019-11-14 09:26:50 +08:00 ![]() |
29 lihongjie0209 2019-11-14 09:27:58 +08:00 @Acoolda #23 消费者单独写一张进度表不就好了 |
![]() | 30 Acoolda OP |
31 lihongjie0209 2019-11-14 09:42:49 +08:00 ![]() @Acoolda #30 直接反馈不现实, 因为你不知道消费者的需要多长时间来消费, 那么你的前端连接就需要一直保持 那么一定存在一些任务, 直到连接超时都没能完成, 你直接反馈的数据就会丢失(假如你不写入进度表) 如果用户想再次查看当前任务的进度, 那你就没有数据用于显示了 如果你直接反馈之后写入进度表防止连接超时, 那么这个动作最好的消费者那端进行, 没必要再回调生产者了 |
![]() | &nbp; 32 Acoolda OP @lihongjie0209 嗯,谢谢提醒,具体各种其他问题我还没想透彻 |