- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我使用 ActiveMQ 作为代理来传递消息。这些消息旨在写入数据库中。有时,数据库无法访问或已关闭。在这种情况下,我想回滚我的消息以便稍后重试此消息,并且我想继续阅读其他消息。
这段代码工作正常,除了一点:回滚消息阻止我阅读其他代码:
private Connection getConnection() throws JMSException {
RedeliveryPolicy redeliveryPolicy = new RedeliveryPolicy();
redeliveryPolicy.setMaximumRedeliveries(3); // will retry 3 times to dequeue rollbacked messages
redeliveryPolicy.setInitialRedeliveryDelay(5 *1000); // will wait 5s to read that message
ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(user, password, url);
Connection connection = connectionFactory.createConnection();
((ActiveMQConnection)connection).setUseAsyncSend(true);
((ActiveMQConnection)connection).setDispatchAsync(true);
((ActiveMQConnection)connection).setRedeliveryPolicy(redeliveryPolicy);
((ActiveMQConnection)connection).setStatsEnabled(true);
connection.setClientID("myClientID");
return connection;
}
我以这种方式创建我的 session :
session = connection.createSession(true, Session.SESSION_TRANSACTED);
回滚很容易问:
session.rollback();
假设我的队列中有 3 条消息:
1: ok
2: KO (will need to be treated again : the message I want to rollback)
3: ok
4: ok
我的消费者会做(线性序列):
commit 1
rollback 2
wait 5s
rollback 2
wait 5s
rollback 2
put 2 in dead letter queue (ActiveMQ.DLQ)
commit 3
commit 4
但是我想要:
commit 1
rollback 2
commit 3
commit 4
wait 5s
rollback 2
wait 5s
rollback 2
wait 5s
put 2 in dead letter queue (ActiveMQ.DLQ)
那么,我该如何配置我的消费者以延迟我回滚的消息呢?
最佳答案
这实际上是预期的行为,因为消息重试是由客户端处理的,而不是代理。因此,由于您有 1 个 session 绑定(bind),并且您的重试策略是为 DLQ 之前的 3 次重试设置的,因此整个重试过程会阻塞该特定线程。
所以,我的第一个问题是,如果数据库插入失败,您是否会期望所有其他数据库插入都因类似原因而失败?
如果不是,解决这个问题的方法是将该队列的重试策略设置为 0 次重试,并使用特定的 DLQ,这样消息将立即失败并进入 DLQ。然后让另一个进程每 5 秒退出 DLQ 并重新处理和/或将其放回主队列中进行处理。
关于java - ActiveMQ : dead letter queue keeps my messages order,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3238767/
这是一个简单的问题,但它一直困扰着我和我的日志。 我有一个配置: akka { log-dead-letters-during-shutdown = off log-dead-letters
这是 my question here 的一种扩展. 我有 3 个类(class)。 我的主要内容: import java.io.*; public class ConnectionManager
关闭。这个问题是opinion-based .它目前不接受答案。 想改进这个问题?更新问题,以便 editing this post 可以用事实和引用来回答它. 8年前关闭。 Improve this
我知道在Java中的垃圾收集期间,不再有任何引用的对象会被标记为“死亡”,以便垃圾收集器可以将它们从内存中删除。 我的问题是,在垃圾收集阶段,所有“死亡”对象是否都会从内存中删除,或者其中一些对象会存
在那里, 我修改了 Lua 5.0 在线文档中的“perm”示例:http://www.lua.org/pil/9.3.html .我所做的是将 __call() 元方法重新指向 perm() 函数。
我正在开发一个 JavaEE 应用程序,我有以下方法: public String alterar_data_ato_med (int cod_ato, GregorianCalendar nova_
if (myCondition1 && myCondition2 && myCondition3) { ... } 我写了这段代码并运行成功。但我收到了关于 (...) 的一部
“死牛肉”一词是什么意思?我是从一个面试问题中读到的。它与ipv6有关。我以为它可能是一个随机的十六进制数字,例如“快速的棕色狐狸跳过了懒狗”。 我的理解正确吗?还是更有意义? 最佳答案 http:/
“死牛肉”这个词是什么意思?我是从一个面试问题中读到的。和ipv6有关系。我认为它可能是一个随机的十六进制数字,用于示例,例如“敏捷的棕色狐狸跳过了懒狗”。 我的理解正确吗?还是有更重要的意义? 最佳
https://docs.docker.com/engine/reference/commandline/ps/说 status One of created, restarting, running
我有一些正在为类(class)编写的 VHDL 代码。但是,综合工具将 cell3、cell2 和 cell1 识别为“死”代码,并且不会对其进行综合。 我真的不知道是什么导致单元格 3、2、1 在合
自 7 月 17 日起,旧的分享按钮在我管理的所有网站上都停止工作了。 我已经阅读了其他面临类似问题的用户的报告,但我找不到任何官方信息。 您知道是否有任何官方资源可用吗? 最佳答案 更新:截至 20
public class DeadCodeInLuna { public static void main(String[] args) throws IOException {
我有许多 UIView 进入 View ,然后离开 View 并且未被使用。但是,我相信他们中的一些人即使在他们离开后仍会收到通知,这会导致问题。 在 UIView“父”容器上: if(self._c
我正在尝试查找未被任何其他代码调用的私有(private)方法 (CA1811) https://msdn.microsoft.com/en-us/library/ms182264(v=vs.110)
对于那些不确定“受约束的非确定性”是什么意思的人,我推荐 Mark Seeman 的 post . 这个想法的本质是只对影响 SUT 行为的数据具有确定性值的测试。不“相关”的数据在某种程度上可以是“
首先,澄清一下,我不是在谈论解除对无效指针的引用! 考虑以下两个示例。 示例 1 typedef struct { int *p; } T; T a = { malloc(sizeof(int) };
我在我们的代码库中遇到了这个代码片段: function initDoughnutChart(target) { var labels = $(target).data("labels").toS
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the he
我正在使用一个继承的代码库,其中包含数千行注释掉的代码。我知道以前的编码员打算为后代保存他所有的辛勤工作,而不是简单地将其删除,但是:我永远不会阅读它,它只会妨碍您。一个问题示例是,当我对某些代码段执
我是一名优秀的程序员,十分优秀!