java - 用于异步操作配置的 Spring 集成错误通道
问题描述
我正在尝试配置一个 HttpRequestExecutingMessageHandler
@Bean
public HttpRequestExecutingMessageHandler httpEnrollHandlerKairos() {
HttpRequestExecutingMessageHandler handler = new HttpRequestExecutingMessageHandler(kairosProperties.getEnrollUrl());
handler.setOutputChannel(channelConfiguration.kairosResponseChannel());
handler.setExpectReply(true);
handler.setMessageConverters(httpMessageConverters);
handler.setHttpMethod(HttpMethod.POST);
handler.setExpectedResponseType(EnrollResponse.class);
handler.setHeaderMapper(defaultHeaderMapper);
return handler;
}
并具有以下流程。
public IntegrationFlow kairosEnrollFlow() {
return IntegrationFlows
.from(channelConfiguration.kairosEnrollChannel())
.<Agreement , EnrollRequest>transform(p -> transformAgreementEnrollRequest(p))
.transform(Transformers.toJson())
.headerFilter(httpRequestHeaderFilters())
.enrichHeaders(m -> m.header(APP_ID, kairosProperties.getAppId()))
.enrichHeaders(m -> m.header(APP_KEY, kairosProperties.getAppKey()))
.handle(httpEnrollHandlerKairos())
.get();
}
我在此流程上为 errorChannel 放置了一个enrichHeaders,但没有结果...
我为 errorChannel 配置了一个 Autowired PS CHannel,如下所示,
@Autowired
@Qualifier("errorChannel")
private PublishSubscribeChannel errorChannel;
我的错误处理程序流程...(为方便起见,重定向到另一个 errorChannel)我的目标是为应用程序上的某些不同问题配置特定的错误通道。
@Autowired
@Qualifier("errorChannel")
private PublishSubscribeChannel errorChannel;
@Autowired
private ChannelConfiguration channelConfiguration;
@Bean
public IntegrationFlow errorHandlerFlow() {
return IntegrationFlows.from(errorChannel)
.<Message<?> , Message<ErrorMessage>>transform(m -> handleExceptionMessage(m))
.channel(channelConfiguration.errorHandlerOutputChannel())
.get();
}
public Message<ErrorMessage> handleExceptionMessage(Message<?> message)
{
MessagingException me = (MessagingException) message.getPayload();
MessageHeaders mh = me.getFailedMessage().getHeaders();
return MessageBuilder.withPayload(new ErrorMessage()).copyHeaders(mh).build();
}
但是经过数百次尝试,我无法让这个 errorChannel 工作,发送方法上的应用程序会触发一个异常,并且永远不会调用 errorChannel 和配置的“errorFlow”。
我注意到应用程序处理程序正在使用 GenericMessagingTemplate ,它转而具有以下代码。
我尝试使用标头(Message 和 IntegrationUtils),而不是“ TemporaryReplyChannel tempReplyChannel = new TemporaryReplyChannel(this.throwExceptionOnLateReply); requestMessage = MessageBuilder.fromMessage(requestMessage).setReplyChannel(tempReplyChannel) .setHeader(this.sendTimeoutHeader, null) .setHeader (this.receiveTimeoutHeader, null) .setErrorChannel(tempReplyChannel).build();"。
这不会让覆盖errorChannel永远......
任何提示如何做到这一点。
有谁知道会发生什么,所有有问题的频道都是异步的。
任何澄清错误通道配置的帮助都会很高兴。
亲切的问候,
何塞·卡洛斯·卡诺瓦。
解决方案
推荐阅读
- html - 社交媒体图标不显示在 Gmail (html) 中
- android - 使用 CollapsingToolbarLayout 折叠工具栏下方的内容
- ruby-on-rails - Rails 模型测试始终允许不可为空的列为空
- yadcf - 按空单元格过滤表格
- node.js - DeepLink 与谷歌操作。永远不会调用第一次询问
- javascript - 使用javascript在文本中查找不同格式的日期
- php - Laravel 5.5 从 5.4 升级得到错误
- android - 如何在多个 TextureView 中显示相同的视频?
- php - 如何在我的网站上的 shell 中运行 php 脚本?
- macos - 无法在 VS2017 7.6 中打开 Specflow 功能文件(适用于 MAC)