activemq集群环境中,如何使用jms api删除指定延迟任务(该延迟任务尚未过期)?
问题详述
已构建ActiveMQ集群, 该集群由A,B两个组构成. A,B两组使用networkConnector
构成集群.
A组配置
B组配置
A组有两个MQ实例, B组也有两个MQ实例, 都启用了延迟队列
并且已测试过, producer向A组节点发送消息, 连接B组的consumer能够正常消费到A组中的消息.
但是, 现在的问题是, producer连接localhost:61618
的MQ(这是A组内的MQ节点), 发送延迟消息(比如说延迟:1小时),
consumer连接B组内的MQ节点, 无法进行A组延迟消息的删除.
如下为consumer获取延迟消息
如上的代码不包含删除的代码, 因为连获取都获取不到, 就别提删除了.
最后要补充一点的时, 当producer和consumer连接到同一个MQ实例的时候, 是可以获取到的. 也可以正常删除的.
那么问题来了, 我集群环境下, 如何删除指定延迟消息呢? 是我集群搭建有问题, 还是API使用上有问题? 或者说ActiveMQ在集群环境时,根本没法做到这一点? 如果是这样的话, 你们在生产环境, 遇到需要如下情况是如何处理的呢?
商城系统, 要求用户下单之后, 如果30分钟未付款, 则将订单设置为无效, 且将库存还原. 如果30分钟内付款成功了, 则执行真正意义的下单流程.
我的做法是, 下单时, 生成一个延迟消息, 该消息记录了订单相关信息, 如果30分钟之后用户未付款,则连接MQ的消费者, 接收到该消息, 执行订单取消, 库存恢复等操作. 但问题在于如果用户在30分钟内付款了, 如何删除这个延迟消息呢?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
不应该采用此种方式删除,而应该在时间到了之后,判断对应数据是否要继续执行