我有一个积压的主题,即生产环境中客户数据的 ActiveMQ 消息,我需要编写一个脚本来将其取消排队并执行任何必要的业务逻辑。
如果业务逻辑出现问题,但我已经阅读了消息(可能通过 JMS(,那可能意味着所有消息都消失了 - 我会遇到巨大的麻烦。
有没有办法在不删除消息的情况下阅读消息?
这是消息传递中的常见模式。 如果您使用的是 JMS API,您有以下几种选择:
- 创建会话时使用CLIENT_ACKNOWLEDGE模式,并在业务逻辑完成后确认消息。 如果业务逻辑失败,请不要确认消息,并且不会将其从队列中删除。
- 使用事务处理会话。如果业务逻辑成功完成,则提交事务。如果业务失败,则回滚事务。
这两者都很常见,您可以使用自己喜欢的搜索引擎找到有关所有正确 API 调用等的更多信息。