Я читал документацию Spring-Cloud-Stream, в частности Обработка ошибок :
@StreamListener(Sink.INPUT) // destination name 'input.myGroup'
public void handle(Person value) {
throw new RuntimeException("BOOM!");
}
@ServiceActivator(inputChannel = Processor.INPUT + ".myGroup.errors") //channel name 'input.myGroup.errors'
public void error(Message<?> message) {
System.out.println("Handling ERROR: " + message);
}
Что касается того, что в документации говорится об этом, когда вы хотите отловить ошибки, вы можете использовать @ServiceActivator
. У этого нет связанного внешнего назначения.
Использование аннотации @StreamListener предназначено специально для
определить привязки, которые соединяют внутренние каналы и внешние
направления. С учетом того, что конкретный канал ошибок назначения делает
НЕ имеют связанного внешнего назначения, такой канал является
прерогатива Spring Integration (SI). Это означает, что обработчик
для такого назначения должен быть определен один из обработчиков SI
аннотации (например, @ServiceActivator, @Transformer и т. д.).
Я также проследил весь этот поток о создании канала ошибок , где он подтверждает, что наличие аннотации @ServiceActivator
не создаст внешнего адресата для распространения ошибок.
У меня есть случай использования, когда процесс внешнего слушателя будет поглощать ошибки, опубликованные в определенной теме ошибок Kafka. Исходя из этого, у меня есть следующие вопросы,
- Что конкретно делает
@ServiceActivator
или что это за функция, предоставляемая этой конкретной аннотацией?
- Каков будет хороший подход для распространения ошибок по внешнему адресу? (Скажем, например, тема Кафки).
- Публикует ли ошибка во внешнем месте назначения для последующего ее использования по хорошей схеме?