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 1
你看下 rabbitmq 的 rqc 能否解决你的问题
|
12
Raymon111111 2019-11-13 19:02:13 +08:00
感觉你想要的是 rpc 而不是 mq
|
13
lalalla 2019-11-13 23:19:54 +08:00 1
可以用 rabbitmq 实现 RPC,实时回调
|
15
xuanbg 2019-11-14 07:14:34 +08:00
消费完推一个数据到另一个队列里面让生产者去消费不就行了吗
|
16
AngryMagikarp 2019-11-14 07:16:17 +08:00 1
生产者一般不需要知道这个吧,如果要知道用 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 1
|
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 1
@Acoolda #30 直接反馈不现实,
因为你不知道消费者的需要多长时间来消费, 那么你的前端连接就需要一直保持 那么一定存在一些任务, 直到连接超时都没能完成, 你直接反馈的数据就会丢失(假如你不写入进度表) 如果用户想再次查看当前任务的进度, 那你就没有数据用于显示了 如果你直接反馈之后写入进度表防止连接超时, 那么这个动作最好的消费者那端进行, 没必要再回调生产者了 |
32
Acoolda OP @lihongjie0209 嗯,谢谢提醒,具体各种其他问题我还没想透彻
|