我发现了一个xml配置的入站适配器示例,但我并不完全理解。配置指定REST请求设置请求方法、使用的格式等。
我认为,从Spring集成的角度来看,响应应该更加重要,因为响应实际上是为消息通道提供信息的。我说得对吗?
HTTP入站适配器用作消息endpoint(实际上是消息起始点),它调用HTTP请求,例如REST服务的URL。”http://myRest/transfer/next“-向SI消息通道提供其结果。对吗?
很难找到一个例子,也很难将其他例子转换成满足我需求的东西。更重要的是,许多例子都是XML配置的,而我想用Java或Dsl配置。
我正在寻找一个示例,其中调用REST服务(我将提供),它返回我的TransferRequest
对象的JSON表示形式,该对象被馈送到SI通道“transfer_next_channel”以由消息处理程序处理。
我的代码方法相当像骨架。我该怎么办?
@Bean
public IntegrationFlow httpInboundFlow() {
return IntegrationFlows
.from(Http.inboundChannelAdapter("http://myRest/transfer/next")
.requestMapping(r -> r
.methods(HttpMethod.GET)
.consumes("text/html"))
.requestPayloadType(TransferRequest.class)
.headerMapper(myHeaderMapper)
)
.channel("transfer_next_channel")
.get();
}
@Bean
@ServiceActivator(inputChannel = "transfer_next_channel")
public MessageHandler handler() {
return new MessageHandler() {
@Override
public void handleMessage(Message<?> message) throws MessagingException {
System.out.println("myHandler: " + message.getPayload());
System.out.println("myHandler: " + message.getHeaders());
}
};
}
编辑1
整个事情是通过TCP/IP从持久DB状态生成一个人的数据消息到String消息。首先有需要什么消息的信息。它是通过外部REST服务提供的。结果是一个TransferRequest
实体。由此必须生成消息:另一个外部REST服务调用将TransferRequest
转换为某种DataMessage
,即所需的数据消息。一旦TCP/IP客户端连接,该结果将通过TCP/IP服务器交付。
编辑2
消息通道为:以请求开始“http://myRest/transfer/next对于外部服务,获取TransferRequest(包含一个personId),将其作为消息推送到通道中,transformer/handler请求(另一个)外部服务http://myRest/message/{personId}”,获取数据消息,将其作为消息推送到另一个通道,处理程序将消息推送到TcpOutboundGateway中,以供外部系统接收。
像这样?
@Bean
public IntegrationFlow httpInboundFlow() {
return IntegrationFlows
.from(Http.inboundGateway("/demo")
.replyChannel("reply")
.requestMapping(r -> r.methods(HttpMethod.GET))
.requestPayloadType(String.class)
)
.channel("next")
.get();
}
@Bean
public MessageChannel reply() {
return new QueueChannel();
}
@Bean
@ServiceActivator(inputChannel = "next",outputChannel = "reply")
public Function<Message<?>, String> handler() {
return new Function<Message<?>, String>() {
public String apply(Message<?> message) throws MessagingException {
System.out.println("myHandler: " + message.getPayload());
System.out.println("myHandler: " + message.getHeaders());
return "ok";
}
};
}
可能在术语方面存在一些误解:
server
,它期待外部请求,您在下游执行一些逻辑。使用Http.inboundChannelAdapter
我们谈论Spring MVC控制器。Request estPayloadType
是在该入站通道适配器中对HTTP请求正文进行转换的原因,并且该数据将被打包到要发送到该transfer_next_channel
的消息的有效负载中。您可能需要考虑将您的@ServiceActivator
替换为句柄()
,如下所示:
.channel("transfer_next_channel")
.<TransferRequest>handle((p, h) -> )
.get();
注意:您可能不需要中间的通道,IntegrationFlow将为您解决这一问题。
您可能需要更多地阅读Spring集成参考手册以了解通道适配器、网关和DSL的概念。
如何通过注释而不是常规配置文件配置入站通道适配器?我可以为会话工厂定义bean,如下所示: 如何配置通过注释下给出的入站通道适配器? 我正在寻找的是在应用程序启动时连接所有bean,然后公开一些方法来开始轮询服务器,处理它们,然后从本地删除它们,类似于 其中getPollableChannel()为我提供了用于轮询的bean。
问题内容: 入站和出站通道适配器之间的根本区别是什么? 任何示例都将非常有帮助。 我已经查看过Spring文档,这种“方向性”的区别对我来说还不清楚。我支持配置了outbound-channel-adapter的应用程序,但是我发现使用 出站 标签可以直观地了解行为计数器。该适配器获取一个外部文件,然后 将其 引入应用程序中, 在 该应用程序中我们解析文件并保留数据。 这类似于这个问题,但是我想更
我试图将从Quickfix读取消息(读取修复消息)配置到spring集成中。我知道我可以使用入站通道适配器从外部源(如QuickFix)读取数据。您能提供如何编写事件驱动入站通道适配器的示例吗?我有以下配置不起作用
问题内容: Spring Integration FTP中的入站通道适配器和出站通道适配器之间有什么区别?我应该使用哪一个?何时使用? 我从文档中了解到,出站可以发送任何类型的文件(例如byte [],String,java.io.File),但入站仅限于文件类型。那仅仅是区别还是其他? 问题答案: 我建议您首先阅读理论 。 任何Inbound适配器都旨在从外部系统获取数据。Outbound-放置