use*_*124 2 throttling spring-integration eip
将通道适配器定义为:
<int:channel id="target">
<int:queue />
</int:channel>
<int-jdbc:inbound-channel-adapter id="adapter" channel="target" query="${int.poll.query}" update="${int.update.query}" data-source="mock-datasource">
<int:poller fixed-rate="5000"/>
</int-jdbc:inbound-channel-adapter>
Run Code Online (Sandbox Code Playgroud)
我想知道为什么我不能在运行时修改轮询率,如下:
SourcePollingChannelAdapter adapter = applicationContext.getBean("adapter",SourcePollingChannelAdapter.class);
adapter.setTrigger(new PeriodicTrigger(1000));
Run Code Online (Sandbox Code Playgroud)
当我调试这个解决方案时,我可以看到适配器附加了这个新的触发器,但是轮询率保持不变(每 5 秒一次)。我也尝试过 stop() 和 start() 适配器,运气类似。
任何人都可以指出我做错了什么?谢谢
[分辨]
Spring 团队成员已经确认,不能在运行时修改触发器。因此,如果您想动态修改轮询率,例如限制入站消息,则必须推出自己的 Trigger 实现并为间隔轮询添加一个 setter。
我将在我的配置中所做的更改留在这里:
<int-jdbc:inbound-channel-adapter id="bancsAdapter" channel="target" query="${int.bancs.poll.query}" update="${int.bancs.update.query}" data-source="bancsMockDB">
<int:poller trigger="dynamicTrigger" />
</int-jdbc:inbound-channel-adapter>
<bean id="dynamicTrigger" class="directlabs.integration.DynamicTrigger">
<constructor-arg value="5000" />
</bean>
Run Code Online (Sandbox Code Playgroud)
因此,对于节流,您只需要执行以下操作:
applicationContext.getBean("dynamicTrigger",DynamicTrigger.class).setPeriod(1000);
Run Code Online (Sandbox Code Playgroud)
DynamicTrigger 的实现可以在这里找到
可以在此处找到 Spring 团队成员的原始评论。
| 归档时间: |
|
| 查看次数: |
2087 次 |
| 最近记录: |