Spring云流服务总线绑定器的错误通道

我正在尝试为 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". 很明显,我在这里遗漏了一些东西,但我找不到一个可行的例子。

EDIT:我正在使用下面的Supplier Bean。

@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 我这边有一个消费者)。

编辑和解决方案。

看来是我的环境出了问题 重建之后,一切都如预期的那样,而且是如期进行 Garry Russell的答案显示. 对不起,浪费了时间。为了方便后人,这正是我的工作方法。

当声明一个约束时

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);
}

要从全局错误通道接收错误。

解决方案:

我刚刚用这个yaml测试了一下,属性是 true 如期而至。

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

你确定你的制作人姓名(produce-out-0)是否正确?

本文来自投稿,不代表运维实战侠立场,如若转载,请注明出处:https://www.shizhanxia.com/876.html

(0)
上一篇 2022年6月29日 下午4:01
下一篇 2022年6月29日 下午4:01

相关推荐

发表评论

登录后才能评论