用于 HTTP 通信的出站通道适配器与出站网关
Outbound channel adapter vs. outbound gateway for HTTP communication
我正在使用 Spring 集成 (4.2.2) 和 Spring 集成 Java DSL (1.1.0)。我有两种情况需要使用 HTTP 与其他服务集成。我不确定是使用出站通道适配器还是出站网关。我想两者在技术上都可行,但 "best practice" 是什么?
我不是在等待任何数据回复,而是在等待响应代码 - 2xx 或错误 (4xx/5xx)。调用者应阻止调用,如果出现 HTTP 错误响应代码,调用者应收到异常。当我使用出站通道适配器时,它工作正常,但我想知道使用出站网关是否更可取?
我已阅读 general question about the difference between outbound channel adapter and outbound gateway,但我不确定它如何适用于我的情况。
我的代码:
@Component
public class Notifier { // this is the client
@Autowired
public MessageChannel notificationChannel;
public void notifySuccess(String applicationNumber) {
// this should block until a HTTP response is received an should throw an exception if HTTP error code was returned
notificationChannel.send(new GenericMessage<>(new SuccessMessage()));
}
}
@Configuration
public class NotificationConfig {
@Bean
public MessageChannel notificationChannel() {
return MessageChannels.direct().get();
}
@Bean
public IntegrationFlow notificationFlow(@Value("${url.notification}") URI notificationUrl) {
return IntegrationFlows.from(notificationChannel())
.handle(Http.outboundChannelAdapter(notificationUrl)) // I'm wondering about this part
.get();
}
}
答案很简单;通道适配器用于单向集成——当消息发送到出站通道适配器时流程结束(即发即弃);网关用于双向集成(请求-回复)。这是 summarized in the endpoint quick reference.
您没有等待任何数据这一事实无关紧要;您需要等待端点的回复(状态代码)。因此,网关就是您所需要的。
我正在使用 Spring 集成 (4.2.2) 和 Spring 集成 Java DSL (1.1.0)。我有两种情况需要使用 HTTP 与其他服务集成。我不确定是使用出站通道适配器还是出站网关。我想两者在技术上都可行,但 "best practice" 是什么?
我不是在等待任何数据回复,而是在等待响应代码 - 2xx 或错误 (4xx/5xx)。调用者应阻止调用,如果出现 HTTP 错误响应代码,调用者应收到异常。当我使用出站通道适配器时,它工作正常,但我想知道使用出站网关是否更可取?
我已阅读 general question about the difference between outbound channel adapter and outbound gateway,但我不确定它如何适用于我的情况。
我的代码:
@Component
public class Notifier { // this is the client
@Autowired
public MessageChannel notificationChannel;
public void notifySuccess(String applicationNumber) {
// this should block until a HTTP response is received an should throw an exception if HTTP error code was returned
notificationChannel.send(new GenericMessage<>(new SuccessMessage()));
}
}
@Configuration
public class NotificationConfig {
@Bean
public MessageChannel notificationChannel() {
return MessageChannels.direct().get();
}
@Bean
public IntegrationFlow notificationFlow(@Value("${url.notification}") URI notificationUrl) {
return IntegrationFlows.from(notificationChannel())
.handle(Http.outboundChannelAdapter(notificationUrl)) // I'm wondering about this part
.get();
}
}
答案很简单;通道适配器用于单向集成——当消息发送到出站通道适配器时流程结束(即发即弃);网关用于双向集成(请求-回复)。这是 summarized in the endpoint quick reference.
您没有等待任何数据这一事实无关紧要;您需要等待端点的回复(状态代码)。因此,网关就是您所需要的。