Я пытаюсь настроить канал ошибки для Spring Cloud Azure Переполнитель очереди служебной шины , но безуспешно. Я включил канал ошибок через
spring:
cloud:
stream:
function:
definition: produce
bindings:
produce-out-0:
destination: service-bus-q-a
producer:
error-channel-enabled: true
И попытался определить @ServiceActivator
:
@ServiceActivator(inputChannel = "service-bus-q-a.errors")
public void errors(ErrorMessage receiveMsg) {
System.err.println("receive error msg: " + receiveMsg);
}
Я также пробовал на inputChannel = "errorChannel"
и inputChannel = "service-bus-q-a.$Default.errors"
. Очевидно, я что-то здесь упускаю, но я не смог найти работающий пример.
РЕДАКТИРОВАТЬ: я использую следующий компонент поставщика:
@Bean
Supplier<String> produce() {
return () -> {
String msg = "a message to produce";
LOG.info("Producing message: " + msg);
return msg;
};
}
В соответствии с соглашения о присвоении имен , имя привязки будет produce-out-0
. Я вижу, что сообщение действительно отправляется на service-bus-q-a
(у меня есть потребитель на другой стороне).
РЕДАКТИРОВАНИЕ И РЕШЕНИЕ:
Так что, похоже, я У меня была проблема с окружающей средой, и после ее восстановления все работало, как ожидалось, и, как показывает ответ Гарри Рассела . Извините за потраченное время. Для потомков это именно то, что у меня сработало:
При объявлении привязки
spring:
cloud:
stream:
bindings:
produce-out-0:
destination: service-bus-q-a
producer:
error-channel-enabled: true
Канал ошибок, который будет создан, будет называться {destination}.errors
, в данном случае service-bus-q-a.errors
, Кроме того, у вас есть канал глобальной ошибки errorChannel
, который также будет вызываться в случае возникновения ошибки. Таким образом, вы можете использовать либо
@ServiceActivator(inputChannel = "service-bus-q-a.errors")
public void errors(ErrorMessage receiveMsg) {
System.err.println("receive error msg: " + receiveMsg);
}
для получения ошибок от service-bus-q-a
или
@ServiceActivator(inputChannel = "errorChannel")
public void errors(ErrorMessage receiveMsg) {
System.err.println("receive error msg: " + receiveMsg);
}
для получения ошибки от канала глобальной ошибки.