自动将错误从 errorChannel 发布到特定目的地
Automatically publish errors from errorChannel to the specific destination
This documentation 表示,可以自动将错误消息从全局 errorChannel 发送到特定目的地,唯一需要做的就是设置以下 属性:
spring.cloud.stream.bindings.error.destination
这部分我真的很困惑。仅添加 属性 不起作用(我使用 RabbitMQ,配置了 Exchange 和 Queue)。所以我可以在我的应用程序中看到由@ServiceActivator 处理的错误,但它没有发送到 RabbitMQ 中的 "myErrors" 交换。看起来 属性 没有为 errorChannel.
定义出站绑定
如果我在我的应用程序中明确创建输出 "error" 通道,
/**
* Error channel name.
*/
String ERROR_ONE = "error";
@Output(MySink.ERROR_ONE)
MessageChannel errorOne();
并从我的全局处理程序明确向其发送错误消息,例如通过声明 outputChannel:
@ServiceActivator(inputChannel = "errorChannel", outputChannel = "error")
public ErrorMessage errorGlobal(ErrorMessage message) {
System.out.println("Handling ERROR GLOBAL SA: " + message);
return message;
}
它会起作用的。但这也可以对绑定特定的处理程序完成,所以这里没有 errorChannel-specific。
问题:我是不是漏掉了什么?是否可以在不明确定义出站渠道的情况下完成发布?
关于 ...binding.errors...
的文档已过时,需要修复。
您应该改用 auto-bind-dlq
和 republish-to-dlq
,框架会将失败的消息发布到 dlq,另外 headers 包含有关失败的信息。
This documentation 表示,可以自动将错误消息从全局 errorChannel 发送到特定目的地,唯一需要做的就是设置以下 属性:
spring.cloud.stream.bindings.error.destination
这部分我真的很困惑。仅添加 属性 不起作用(我使用 RabbitMQ,配置了 Exchange 和 Queue)。所以我可以在我的应用程序中看到由@ServiceActivator 处理的错误,但它没有发送到 RabbitMQ 中的 "myErrors" 交换。看起来 属性 没有为 errorChannel.
定义出站绑定如果我在我的应用程序中明确创建输出 "error" 通道,
/**
* Error channel name.
*/
String ERROR_ONE = "error";
@Output(MySink.ERROR_ONE)
MessageChannel errorOne();
并从我的全局处理程序明确向其发送错误消息,例如通过声明 outputChannel:
@ServiceActivator(inputChannel = "errorChannel", outputChannel = "error")
public ErrorMessage errorGlobal(ErrorMessage message) {
System.out.println("Handling ERROR GLOBAL SA: " + message);
return message;
}
它会起作用的。但这也可以对绑定特定的处理程序完成,所以这里没有 errorChannel-specific。
问题:我是不是漏掉了什么?是否可以在不明确定义出站渠道的情况下完成发布?
关于 ...binding.errors...
的文档已过时,需要修复。
您应该改用 auto-bind-dlq
和 republish-to-dlq
,框架会将失败的消息发布到 dlq,另外 headers 包含有关失败的信息。