gpt4 book ai didi

java - Spring Integration + @Aysnc - 网关与 ServiceActivator

转载 作者:太空宇宙 更新时间:2023-11-04 07:42:47 25 4
gpt4 key购买 nike

我有一个远程服务,当特定事件发生时,我调用该服务来加载产品的定价数据。加载后,产品定价就会被广播,以供其他消费者在其他地方进行处理。

调用代码并不关心响应 - 它是“即发即忘”,响应应用程序事件并触发新的工作流程。

为了使调用代码尽可能快,我想在这里使用 @Async,但结果好坏参半。

基本流程是:

CallingCode -> ProductPricingGateway -> Aggregator -> BatchedFetchPricingTask

这是异步设置:

<task:annotation-driven executor="executor" scheduler="scheduler"/>
<task:scheduler id="scheduler" pool-size="1" />
<task:executor id="executor" keep-alive="30" pool-size="10-20" queue-capacity="500" rejection-policy="CALLER_RUNS" />

使用的另外两个组件是启动代码调用的@Gateway,以及位于聚合器后面的下游@ServiceActivator。 (调用被分批分成小组)。

public interface ProductPricingGateway {    
@Gateway(requestChannel="product.pricing.outbound.requests")
public void broadcastPricing(ProductIdentifer productIdentifier);
}

// ...elsewhere...
@Component
public class BatchedFetchPricingTask {
@ServiceActivator(inputChannel="product.pricing.outbound.requests.batch")
public void fetchPricing(List<ProductIdentifer> identifiers)
{
// omitted
}
}

以及其他相关的集成配置:

<int:gateway service-interface="ProductPricingGateway"
default-request-channel="product.pricing.outbound.requests" />

<int:channel id="product.pricing.outbound.requests" />
<int:channel id="product.pricing.outbound.requests.batch" />

我发现如果我在 @ServiceActivator 方法上声明 @Async ,它就可以正常工作。但是,如果我在 @Gateway 方法(这似乎是更合适的地方)上声明它,则永远不会调用聚合器。

为什么?

最佳答案

我正在努力了解 @Async 如何在此处的任何地方工作,因为起点是当您的代码调用 ProductPricingGateway.broadcastPricing() 方法时。

在网关上使用@Async,调度程序会发送什么?

类似地,在服务上使用@Async,调度程序会在标识符中传递什么?

尽快实现异步的正确方法是使 product.pricing.outbound.requests 成为 ExecutorChannel...

http://static.springsource.org/spring-integration/reference/html/messaging-channels-section.html#executor-channel

http://static.springsource.org/spring-integration/reference/html/messaging-channels-section.html#channel-configuration-executorchannel

...调用线程将消息传递给任务执行器。

关于java - Spring Integration + @Aysnc - 网关与 ServiceActivator,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15798155/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com