我已将 @MessagingGateway 配置如下,以使用错误频道,该频道按预期工作。
from Section3.Dialog import Ui_Dialog
在流程中,我将对象传递给变换器,如下所示:
第1步:
@MessagingGateway(errorChannel = "DefaultInboundErrorHandlerChannel")
public interface InboundMessagingGateway {
@Gateway(requestChannel = "InboundEntryChannel")
void receive(XferRes response);
}
接下来,我更新实体如下: 第2步:
@Transformer(inputChannel = "InboundEntryChannel", outputChannel = "TransmissionLogChannel")
public CassandraEntity createEntity(
org.springframework.messaging.Message<XferRes> message) throws ParseException {
XferRes response = message.getPayload();
CassandraEntity entity = new CassandraEntity();
// ... getters & setter ommitted for brevity
return entity;
}
最后,我发帖到Kafka话题如下: 第3步:
@ServiceActivator(inputChannel = "TransmissionLogChannel", outputChannel="PublishChannel")
public XferRes updateCassandraEntity(
org.springframework.messaging.Message<XferRes> message) {
XferRes response = message.getPayload();
this.cassandraServiceImpl.update(response);
return response;
}
如果出现错误,我会将消息发布到发布错误对象以记录其中的服务:
@ServiceActivator(inputChannel = "PublishChannel")
public void publish(org.springframework.messaging.Message<XferRes> message){
XferRes response = message.getPayload();
publisher.post(response);
}
如果在更新数据库时步骤2:发生错误,那么我也想调用第3步。一个微不足道的方法是删除第2步&amp;从第1步进行更新数据库调用。
在Spring Integration中是否还有其他方法可以调用第3步,无论是否发生错误。
答案 0 :(得分:1)
此技术称为PublishSubscribeChannel
。由于我看到您在第二步中重用了有效负载以发送到第三步,因此它绝对是PublishSubscribeChannel
及其两个连续订阅者的用例。
我的意思是您创建了一个PublishSubscribeChannel
@Bean
,而@ServiceActivator
个人使用此频道的名称。
Reference Manual中有更多信息。请注意ignoreFailures
属性:
/**
* Specify whether failures for one or more of the handlers should be
* ignored. By default this is <code>false</code> meaning that an Exception
* will be thrown whenever a handler fails. To override this and suppress
* Exceptions, set the value to <code>true</code>.
* @param ignoreFailures true if failures should be ignored.
*/
public void setIgnoreFailures(boolean ignoreFailures) {