0

私は春AMQPメッセージの回復力がダウン

RabbitTemplate template = // get template from some bean 
RetryTemplate retryTemplate = new RetryTemplate(); 
ExponentialBackOffPolicy backOffPolicy = new ExponentialBackOffPolicy(); 
// 10 sec 
backOffPolicy.setInitialInterval(10000); 
// 1 hr 
backOffPolicy.setMultiplier(360.0); 
// 1 hr max interval 
backOffPolicy.setMaxInterval(3600001); 
retryTemplate.setBackOffPolicy(backOffPolicy); 
template.setRetryTemplate(retryTemplate); 

template.convertAndSend("Direct-Exchange", 
     "Test.Routing.Key", AMQPMessage); 
春の再試行を使用している同じもののため

、ダウンのRabbitMQサーバ接続の場合には、管理春AMQPクライアント・メッセージ・弾力性のユースケースを持っています

しかし、それをテストしてブローカを落とすと、それはtemplate.convertAndSend()でハングアップし、RabbitMQブローカ接続が復元されても回復しません。

答えて

2

あなたの再試行設定はかなり極端です。あなたは1時間待っていましたか?

それは私のために正常に動作します...

@SpringBootApplication 
public class So44300651Application implements CommandLineRunner { 

    public static void main(String[] args) { 
     SpringApplication.run(So44300651Application.class, args).close(); 
    } 

    @Autowired 
    private RabbitTemplate template; 

    @Override 
    public void run(String... args) throws Exception { 
     template.convertAndSend("foo"); 
    } 

    @Bean 
    public RabbitTemplate template(ConnectionFactory cf) { 
     RabbitTemplate template = new RabbitTemplate(cf); 
     RetryTemplate retry = new RetryTemplate(); 
     ExponentialBackOffPolicy backOff = new ExponentialBackOffPolicy(); 
     backOff.setInitialInterval(10_000); 
     backOff.setMultiplier(1.5); 
     backOff.setMaxInterval(15_000); 
     retry.setBackOffPolicy(backOff); 
     template.setRetryTemplate(retry); 
     return template; 
    } 

} 

結果:

09:19:45.592 [main] DEBUG o.s.retry.support.RetryTemplate - Retry: count=0 
09:19:45.603 [main] DEBUG o.s.r.b.ExponentialBackOffPolicy - Sleeping for 10000 
09:19:55.607 [main] DEBUG o.s.retry.support.RetryTemplate - Checking for rethrow: count=1 
09:19:55.607 [main] DEBUG o.s.retry.support.RetryTemplate - Retry: count=1 
09:19:55.608 [main] DEBUG o.s.r.b.ExponentialBackOffPolicy - Sleeping for 15000 
09:20:10.610 [main] DEBUG o.s.retry.support.RetryTemplate - Checking for rethrow: count=2 
09:20:10.610 [main] DEBUG o.s.retry.support.RetryTemplate - Retry: count=2 
09:20:10.654 [main] INFO o.s.a.r.c.CachingConnectionFactory - Created new connection: [email protected] [delegate=amqp://[email protected]:5672/, localPort= 56958] 
+0

ラッセル、ソリューションはよさそうだ、しかし、ビューの弾力性の観点からのRabbitMQサービスは、たとえば、1時間のために使用できない場合(一般的にはそうではありませんが、まれにしか起こりません)、その設定はアプリケーションを過度に使用していますか? – Akshat

+0

私が言っているのは、試行の間に1時間待つのは長すぎるということです。ほとんどの人は数秒ごとに、あるいはおそらく1分ごとに試行します。 –

関連する問題