activemq集群环境中,如何使用jms api删除指定延迟任务(该延迟任务尚未过期)?

问题详述

已构建ActiveMQ集群, 该集群由A,B两个组构成. A,B两组使用networkConnector构成集群.

A组配置
clipboard.png

B组配置
clipboard.png

A组有两个MQ实例, B组也有两个MQ实例, 都启用了延迟队列

clipboard.png

并且已测试过, producer向A组节点发送消息, 连接B组的consumer能够正常消费到A组中的消息.

但是, 现在的问题是, producer连接localhost:61618的MQ(这是A组内的MQ节点), 发送延迟消息(比如说延迟:1小时),

consumer连接B组内的MQ节点, 无法进行A组延迟消息的删除.

如下为consumer获取延迟消息

clipboard.png

如上的代码不包含删除的代码, 因为连获取都获取不到, 就别提删除了.

最后要补充一点的时, 当producer和consumer连接到同一个MQ实例的时候, 是可以获取到的. 也可以正常删除的.

那么问题来了, 我集群环境下, 如何删除指定延迟消息呢? 是我集群搭建有问题, 还是API使用上有问题? 或者说ActiveMQ在集群环境时,根本没法做到这一点? 如果是这样的话, 你们在生产环境, 遇到需要如下情况是如何处理的呢?

商城系统, 要求用户下单之后, 如果30分钟未付款, 则将订单设置为无效, 且将库存还原. 如果30分钟内付款成功了, 则执行真正意义的下单流程.

我的做法是, 下单时, 生成一个延迟消息, 该消息记录了订单相关信息, 如果30分钟之后用户未付款,则连接MQ的消费者, 接收到该消息, 执行订单取消, 库存恢复等操作. 但问题在于如果用户在30分钟内付款了, 如何删除这个延迟消息呢?

回答:

不应该采用此种方式删除,而应该在时间到了之后,判断对应数据是否要继续执行

以上是 activemq集群环境中,如何使用jms api删除指定延迟任务(该延迟任务尚未过期)? 的全部内容, 来源链接: www.h5w3.com/181252.html

回到顶部