Spring Cloud Stream Service-Bus Binder 的错误通道
Error channel for Spring Cloud Stream Service-Bus Binder
我正在尝试为 Spring Cloud Azure Service Bus Queue Stream Binder 配置错误通道,但没有成功。我已经通过
启用了错误通道
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;
};
}
根据 binding naming conventions,绑定的名称将为 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
)是正确的吗?
我正在尝试为 Spring Cloud Azure Service Bus Queue Stream Binder 配置错误通道,但没有成功。我已经通过
启用了错误通道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;
};
}
根据 binding naming conventions,绑定的名称将为 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
)是正确的吗?