队列中如何精准的控制消息的出队(下一条消息始终在上一条消息满足一定条件后才执行)?

发布于 2021-11-29 14:02:08 字数 573 浏览 1004 评论 10

如图,是一个简易的接口报文数据分发平台流转示意图

大致是:源系统下发报文,分发平台根据系统配置,判断出该报文将分发至哪些系统,然后做http请求各系统接口服务,推送报文数据,目标系统在接收到报文自行处理后,将接收处理结果(成功还是失败)通过分发平台提供的单独的结果反馈接口反馈至分发平台

现在想实现如下需求:

1、队列1中的消息,严格保证每一条报文都成功推送后再进行下一条报文的推送,即下一条消息的处理是在上一条消息发送到目标系统后,目标系统成功调用反馈接口返回成功状态后,才执行。如果某一个队列的消息出现了一直无法成功推送,或者该条消息一直未收到来自目标系统的成功反馈,那就一直等待(不然的话,后续的报文就算继续下发下去,数据也可能会发生错位或者异常)

打算用activemq来控制消息队列,但不知道有没有这样的api来支撑这一需求的实现

或者有没有其他的实现方式

请各位不吝赐教!!!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(10

累赘 2021-12-02 06:24:49

定时拉取数据判断,满足条件后再拉取消息处理

疾风者 2021-12-02 06:09:24

我没有了解MQ的规则,我用redis做了个小型的队列,然后强制要求所有队列处理的业务方法的调用必须是幂等的。

然后取出一个队列任务,就将这个任务信息,存在本地文件中,本地文件只存最近处理的一个任务。

当队列处理失败的时候,退出脚本,通过计划任务,重新唤起处理脚本。然后读取本地缓存的那个任务,拿出来执行。

离不开的别离 2021-12-02 05:32:11

CountDownLatch这种方式倒是还没有思考过,只能尝试弄一下了,谢谢了

秋意浓 2021-12-02 04:41:31

这个场景ActiveMQ还是其它的MQ都差不多,性能都不会高,区别可能在于你是否要求队列中的请求持久化,发送线程读取队列头一个元素(peek或take都可以,取决于场景中是否需要持久化)记录下这个请求的特征(序列号或其它的唯一标识该请求的信息)
然后发送。不清楚你用的是什么语言,我用java举例,可以将该请求和一个CountDownLatch对象绑定,初始计数为1,然后发送者在这个CountDownLatch对象上wait,分发者在收到异步的反馈后根据实际需要将与这个请求绑定的countDownLatch对象计数-1,使得能够唤醒发送者继续发送下一个请求。

别低头,皇冠会掉 2021-12-02 02:52:38

历史的原因导致发送至目标系统是异步接收反馈的,即接收是个目标系统接收数据是个接口,目标系统反馈结果又是反向调用分发方这边的另一个接口,所以【同步接收应答】。。。这个估计行不通

凯凯我们等你回来 2021-12-02 01:40:05

回复
1、将所有要分发的消息放到一张表(称为消息表,假设每条消息的主键是字段id,加一个dependId用于标识当前消息的依赖消息),分发任务定时从中读出待处理消息进行分发;分发前读取dependId对应的消息,判断是否发送成功;如果成功,则发送;如果不成功则忽略。 2、接收异步反馈后,要及时更新消息表中对应记录的状态。

甜扑 2021-12-02 00:49:21

.....单线程同步发送然后同步接收应答不就完事了?

这样的业务流程做个异步系统有啥用

初见你 2021-12-02 00:20:45

动态分发报文数据到目标系统,但是要保证每一条都成功分发后再继续下一条分发。。。

筱武穆 2021-12-01 14:20:21

看得有点迷糊,不知道你到底要干什么。。。

风透绣罗衣 2021-12-01 13:54:03

来点人,帮忙看看呀。。。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文