Канал ошибок для связывателя служебной шины Spring Cloud Stream - PullRequest
1 голос
/ 22 апреля 2020

Я пытаюсь настроить канал ошибки для 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);
}

для получения ошибки от канала глобальной ошибки.

1 Ответ

2 голосов
/ 22 апреля 2020

Я только что проверил это с этим yaml, и свойство true, как и ожидалось.

spring:
  cloud:
    stream:
      bindings:
        output:
          producer:
            error-channel-enabled: true
    azure:
      servicebus:
        connectionString: Endpoint=sb://foo.bar

Вы уверены, что ваше имя производителя (produce-out-0) является правильным?

...