Java Spring云数据流服务总线绑定器的错误通道
我正在尝试为配置错误通道,但未成功。我已通过启用错误通道Java Spring云数据流服务总线绑定器的错误通道,java,azureservicebus,spring-cloud-stream,Java,Azureservicebus,Spring Cloud Stream,我正在尝试为配置错误通道,但未成功。我已通过启用错误通道 spring: 云: 流: 功能: 定义:生产 绑定: 生成-out-0: 目的地:service-bus-q-a 制作人: 已启用错误通道:true 并尝试定义@ServiceActivator: @ServiceActivator(inputChannel=“service-bus-q-a.errors”) 公共无效错误(ErrorMessage receiveMsg){ System.err.println(“接收错误消息:+re
spring:
云:
流:
功能:
定义:生产
绑定:
生成-out-0:
目的地:service-bus-q-a
制作人:
已启用错误通道:true
并尝试定义@ServiceActivator
:
@ServiceActivator(inputChannel=“service-bus-q-a.errors”)
公共无效错误(ErrorMessage receiveMsg){
System.err.println(“接收错误消息:+receiveMsg”);
}
我还尝试了inputChannel=“errorChannel”
和inputChannel=“service-bus-q-a.$Default.errors”
。显然,我在这里遗漏了一些东西,但我找不到一个有效的例子
编辑:我正在使用以下供应商bean:
@Bean
供应商产品(){
返回()->{
String msg=“要生成的消息”;
LOG.info(“生成消息:+msg”);
返回味精;
};
}
根据,绑定的名称将为product-out-0
。我可以看到消息确实发送到了service-bus-q-a
(另一侧有一个消费者)
编辑和解决方案:
看来我的环境出了问题,重建后一切都如期进行。对不起,耽误了你的时间。
对子孙后代来说,这正是我的工作:
在声明绑定时
spring:
云:
流:
绑定:
生成-out-0:
目的地:service-bus-q-a
制作人:
已启用错误通道:true
将要创建的错误通道将命名为{destination}.errors
,在本例中为service-bus-q-a.errors
。此外,如果发生错误,还将调用全局错误通道errorChannel
。所以你可以用任何一个
@ServiceActivator(inputChannel=“service-bus-q-a.errors”)
公共无效错误(ErrorMessage receiveMsg){
System.err.println(“接收错误消息:+receiveMsg”);
}
从service-bus-q-a
接收错误,或
@ServiceActivator(inputChannel=“errorChannel”)
公共无效错误(ErrorMessage receiveMsg){
System.err.println(“接收错误消息:+receiveMsg”);
}
从全局错误通道接收错误。我刚刚用这个yaml测试了它,属性是
true
spring:
云:
流:
绑定:
输出:
制作人:
已启用错误通道:true
蔚蓝:
服务总线:
connectionString:Endpoint=sb://foo.bar
您确定您的制作人名称(
product-out-0
)正确吗?看起来他们最近才添加了对该名称的支持:。哦-看起来这只是消费者方面的问题。所以没有办法从生产者发送超时中恢复?对不起;我不知道;我不熟悉那个活页夹。你知道有没有一种非活页夹特定的方法来处理制作人错误吗?嗯-我只是查看了他们的代码,他们确实将errorChannel
注入处理程序(),所以如果error channel enabled
为true
,它应该可以工作。尝试使用调试器。我已经用正在使用的supplier bean编辑了我的答案,我可以看到消息被发送到service-bus-q-a
。如果您在错误频道@ServiceActivator
中输入错误,它是否会在生产者发送超时时被调用?。另外,您使用的是什么springcloudazureservicebus队列流绑定器version?我用的是1.2.3
1.2.3;但我没有一个真实的环境;我使用了一个虚拟连接字符串,只是为了测试布尔值是否被正确设置isErrorChannelEnabled()
对于我来说仍然是真的,并且错误通道不为null,当我将测试更改为使用您的供应商bean,并将product-out-0
作为绑定名称时。因此,如果您在调试器中仍然看到null
错误通道,则看起来您的YAML没有被读取。您是对的,这是我的环境的问题。我已经用完整的解决方案更新了我的问题,我将您的答案标记为正确。谢谢,很抱歉浪费了你的时间。