質問:一定量の再試行後、メッセージをエラーキューに送信して元のキューから消費したいと思います。私は多くの異なるメッセージを扱うので、ジェネリックな解決策を見つけたいと思います。 maxRetries
の後にSpringがトリガーするようにRecoveryCallback
を設定するにはどうすればよいですか?春のRabbitTemplateのsetRetryTemplateとsetRecoveryCallbackが無視されました
は、私は現在、
を何私はRetryTemplate
とRecoveryCallback
を設定してみてください。 アプリケーションを実行してメッセージをtest
キューに発行すると、EListener#receive
の処理が3回失敗し、次に設定されたRecoveryCallback
がトリガーされ、コンテキストに基づいてメッセージが特定のエラーキューにルーティングされます。実際には、実際に何が起こる をどうなり
は春ブーツは私のように構成RabbitTemplate
Beanを使用していないため、RabbitTemplate
、自身の持つRabbitAdmin
オブジェクトを初期化していることです。
私は次のディレクトリ構造を持っている:
rabbit
|___ EListener.java
|___ Rabbit.java
test
|___ Test.java
私はRabbit.java
@Configuration
public class Rabbit {
@Autowired
ConnectionFactory connectionFactory;
@Bean
public RabbitTemplate rabbitTemplate() {
RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory);
rabbitTemplate.setRetryTemplate(createRetryTemplate());
rabbitTemplate.setRecoveryCallback(createRecoveryCallback());
return rabbitTemplate;
}
createRecoveryCallback() // Omitted for brevity
createRetryTemplate() // Omitted for brevity
}
をEListener.java
ファイルが含まれています:
@Component
public class EListener {
@Autowired
RabbitTemplate rabbitTemplate;
@RabbitListener(bindings = @QueueBinding(value = @Queue(value = "test", durable = "true"), exchange = @Exchange(value = "test", type = ExchangeTypes.TOPIC, durable = "true", autoDelete = "true"), key = "test"))
public void receive(Message m) throws Exception {
System.out.println(m);
throw new Exception();
}
}
Test.java
は含まれています
RetryTemplate
を追加210
デフォルトのリカバリとして現在使用されている 'RejectAndDontRequeueRecoverer'を置き換えることは可能ですか? – dparted
残念ながらそうではありません。リカバリは[boot 'config'd retry interceptor]にハード配線されています(https://github.com/spring-projects/spring-boot/blob/master/spring-boot-autoconfigure/src/main/java/org/springframework)。 /boot/autoconfigure/amqp/SimpleRabbitListenerContainerFactoryConfigurer.java#L104)。あなたは自分のbeanを結ぶことができます(https://github.com/spring-projects/spring-boot/blob/master/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/)。 amqp/RabbitAnnotationDrivenConfiguration.java#L62)は、ブートのコンフィギュレーターを使用し、 'adviceChain'を独自のインターセプターで上書きします。 –
それから私はそれをします。それを最初に持っていることは素晴らしいことです。助けてくれてありがとう。 – dparted