- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我的接收器处理了特定数量的消息后,我需要停止 Rabbit 监听器并调用一个方法,然后再次启用监听器。
@RabbitListener(...)
public void sink(Message msg) {
processMsg();
if (condition) {
rabbitListenerEndpointRegistry.stop();
doTask();
rabbitListenerEndpointRegistry.start();
}
}
不幸的是,如果我停止接收器方法内的监听器,事务将失败并且消息将返回到队列。我正在寻找一种在事务完成且监听器不持有任何消息后调用方法的方法。
- Receive a msg and process the msg
- Finish the transaction and release the msg <- I don't want to receive any new msgs after this point
- If the condition is satisfied stop the listener
- Do a long running task
- Start the listener
我无法转向手动事务管理,因为它需要对代码进行太多更改,并且在执行自定义任务时我无法保留任何消息,因为它是一个长时间运行的任务,并且我希望其他工作人员处理这段时间的消息。
Rabbit 工厂配置中的setAfterReceivePostProcessors
和 setAdviceChain
在我的情况下不起作用,因为在这两种情况下,当监听器持有消息时都会调用该方法。
最佳答案
消息监听器容器似乎不适合您的应用程序;您需要一个“拉动”模型。
您可以使用 rabbitTemplate.receive()
或 receiveAndConvert()
方法来按需拉取消息。
如果您在事务之外使用它们,消息将立即得到确认;如果您希望在流程完成后确认消息,请在事务中运行它。
关于java - Spring RabbitListener 在发送消息后调用一个方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58485434/
我的代码遇到了很大的困难。我正在开发一个显示歌词和和弦的应用程序。我使用两个重叠的textview分隔了和弦和歌词。 我在这个项目中遇到的问题是音高改变功能。我尽我所能向我解释得更好: 和弦总数为12
我有一个游戏并使用 Tune 作为分析库。使用最新的 Unity (5.3.4f1) 并通过 Unity 获取 apk(无 eclipse/android studio)。 我的游戏在 Play 商店
我是一名优秀的程序员,十分优秀!