消息系统可靠性

Messaging systems reliability

‌我知道每个消息传递平台(rabbitmq,activemq)都提供了一些机制来保证服务器(rabbitmq)和消费者之间的消息传递,所以如果消费者挂了,消息仍然在队列中并重新传递.但是,如果消息传递平台出现故障并且客户端(消息的生产者)无法将消息传递到平台(Rabbitmq),会发生什么?在那种情况下,需要一个重试方法来重新传递消息,但我不确定是否必须自己实现它,或者客户端库有这个选项,它是否在 connection/channel 创建中声明为参数?它是特定于平台的吗?另外,像 AMQP 这样的协议指定了这个?我也从 Spring 那里听说过重试作为一个选项。

A spring-retry RetryTemplate 可以直接连接到 Spring AMQP 的 RabbitTemplate.

Kafka 在生产者中内置了重试功能(参见 retries 属性)。

对于 JMS,您可以将 JmsTemplate 包装到 RetryTemplate.execute() 方法中。

重试策略、退避等都是可配置的。