带有可轮询请求通道的 int-http:inbound-gateway
int-http:inbound-gateway with pollable request channel
我正在查看一些基于 spring 集成的代码,我注意到所有 int-http:inbound-gateways 都使用可轮询的请求通道:
<int-http:inbound-gateway id="someId"
request-channel="queue-channel"
reply-channel="reply-channel"
request-payload-type="java.lang.String"
supported-methods="POST"
path="/rest/notifications"
auto-startup="true" />
<int:channel id="queue-channel" datatype="java.lang.String">
<int:queue capacity="100" />
</int:channel>
配置中指定了显式轮询器:
<int:poller id="mainSystemPoller" default="true" fixed-delay="500" max-messages-per-poll="1">
<int:transactional transaction-manager="transactionManager" propagation="REQUIRES_NEW" isolation="DEFAULT"/>
</int:poller>
因此,流上游的第一个频道是可轮询的。使用这种方法有什么好处?它是否只是让我们在业务流程(交易配置、队列容量等)方面更加灵活?
如果没有事务配置,在那里使用轮询器几乎没有任何价值,因为 http 线程无论如何都会在网关中等待回复。
但是,在您的情况下,它将启动一个事务并导致网关下游的所有内容在事务中到达 运行。但是,按照配置,这将单线程处理您的请求;你需要一个任务执行器来处理多个并发请求。
还有其他方法运行 事务中的并发 Web 请求;您可以改用事务网关,然后流程将 运行 在 Web 容器线程上运行,并发性由您的 Web 容器管理。
我正在查看一些基于 spring 集成的代码,我注意到所有 int-http:inbound-gateways 都使用可轮询的请求通道:
<int-http:inbound-gateway id="someId"
request-channel="queue-channel"
reply-channel="reply-channel"
request-payload-type="java.lang.String"
supported-methods="POST"
path="/rest/notifications"
auto-startup="true" />
<int:channel id="queue-channel" datatype="java.lang.String">
<int:queue capacity="100" />
</int:channel>
配置中指定了显式轮询器:
<int:poller id="mainSystemPoller" default="true" fixed-delay="500" max-messages-per-poll="1">
<int:transactional transaction-manager="transactionManager" propagation="REQUIRES_NEW" isolation="DEFAULT"/>
</int:poller>
因此,流上游的第一个频道是可轮询的。使用这种方法有什么好处?它是否只是让我们在业务流程(交易配置、队列容量等)方面更加灵活?
如果没有事务配置,在那里使用轮询器几乎没有任何价值,因为 http 线程无论如何都会在网关中等待回复。
但是,在您的情况下,它将启动一个事务并导致网关下游的所有内容在事务中到达 运行。但是,按照配置,这将单线程处理您的请求;你需要一个任务执行器来处理多个并发请求。
还有其他方法运行 事务中的并发 Web 请求;您可以改用事务网关,然后流程将 运行 在 Web 容器线程上运行,并发性由您的 Web 容器管理。