我正在开发一个基于消息的服务,它将所有传入的请求排队并稍后处理它们.处理错误的最佳做法是什么?例如,在将信息发送到下一个系统时,格式错误的消息或通信错误.
通过使用事务,可以处理后者,但是当消息格式错误时,没有必要重试它或保留它.是否有任何想法为不同的场景实现不同的错误处理,如果是,应该怎么做?
谢谢!
AMQP函数consume()是一个带回调的阻塞函数,是否可以为consume()函数设置超时,所以在特定的时间后它不再阻塞并且代码执行完成了?
我想了解RabbitMQ中消息删除的逻辑。
我的目标是即使没有连接到读取它们的客户端也使消息持久化,以便当客户端重新连接时消息正在等待它们。我可以使用持久的惰性队列,以便将消息持久化到磁盘,并且我可以使用 HA 复制来确保多个节点获得所有排队消息的副本。
我希望使用主题或标头路由将消息发送到两个或多个队列,并让一个或多个客户端读取每个队列。
我有两个队列,A 和 B,由标头交换提供。队列 A 获取所有消息。队列 B 仅获取带有“归档”标头的消息。队列 A 有 3 个消费者正在阅读。队列 B 有 1 个消费者。如果 B 的消费者死了,但是 A 的消费者继续确认消息,RabbitMQ 会删除这些消息还是继续存储它们?在重新启动 B 之前,队列 B 不会有任何人使用它,我希望消息保持可用以供以后使用。
到目前为止,我已经阅读了大量文档,但仍然没有找到明确的答案。
我刚刚在runnable的run()方法中编写了这段代码:
try {
dbConnection = MyApp.datasource.getConnection();
} catch (SQLException e) {
logger.log(Level.SEVERE, "Could not obtain a DB connection! Re-enqueuing this task. Message: " + e.getMessage(), e);
MyApp.executor.execute(this);
return;
}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,如果任务无法获得数据库连接,它应该将自身重新入队,并进入运行之前的队列.
我认为这可能是安全的,但感觉很有趣,我只是想确保没有任何我缺少的东西.
谢谢!
我不是高级程序员,但我已经部署了一段时间的应用程序并开发了小型完整系统.
我开始听说像RabbitMQ这样的排队系统.可能是,我从未开发出任何必须使用排队系统的系统.但是,我担心如果我不使用它,因为我不知道该怎么做.我已经在他们的网站上阅读过RabbitMQ教程,但我不知道为什么我会使用它.我不确定是否有任何这些不能通过传统的编程实现,没有额外的组件和常规数据库或类似的.
有人可以解释为什么我会使用一个小例子的排队系统.我的意思不是一个问候世界的例子,而是一个实际的场景.
非常感谢你的时间