Spring Cloud Stream Service Bus Binder的错误通道



我正在尝试为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:

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

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

我刚刚用这个yaml测试了它,它的属性是true

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

你确定你的制作人名字(produce-out-0(是正确的吗?

最新更新