在 Spring Integration 中,它扮演着消息总线的核心角色,您只需要考虑几个配置选项。
首先,您可能希望控制中央实例。
为此,您可以提供一个名为 的 Bean 。
这也定义为一个常量,如下所示:ApplicationContext
TaskScheduler
taskScheduler
IntegrationContextUtils.TASK_SCHEDULER_BEAN_NAME
默认情况下,Spring Integration 依赖于 的实例,如 Spring Framework 参考手册的“任务执行和调度”部分所述。
该默认值会自动启动,其中包含 10 个线程的池,但请参阅全局属性。
如果改为提供自己的实例,则可以将“autoStartup”属性设置为或提供自己的池大小值。ThreadPoolTaskScheduler
TaskScheduler
TaskScheduler
false
当轮询使用者在其配置中提供显式任务执行程序引用时,处理程序方法的调用发生在该执行程序的线程池中,而不是主调度程序池中。 但是,如果未为终结点的轮询器提供任务执行程序,则该轮询器将由主调度程序的线程之一调用。
不要在轮询器线程上运行长时间运行的任务。
请改用任务执行器。
如果有很多轮询终结点,则可能导致线程匮乏,除非增加池大小。
此外,轮询使用者的默认值为 1 秒。
由于轮询器线程此时会阻塞,因此建议您在存在许多此类终结点时使用任务执行器,以避免匮乏。
或者,您可以减少 .receiveTimeout receiveTimeout |
不要在轮询器线程上运行长时间运行的任务。
请改用任务执行器。
如果有很多轮询终结点,则可能导致线程匮乏,除非增加池大小。
此外,轮询使用者的默认值为 1 秒。
由于轮询器线程此时会阻塞,因此建议您在存在许多此类终结点时使用任务执行器,以避免匮乏。
或者,您可以减少 .receiveTimeout receiveTimeout |
如果终结点的输入通道是基于队列(即可轮询)通道之一,则该终结点是轮询使用者。 事件驱动的使用者是那些具有调度程序而不是队列的输入通道的使用者(换句话说,它们是可订阅的)。 此类终结点没有轮询器配置,因为它们的处理程序是直接调用的。 |
如果终结点的输入通道是基于队列(即可轮询)通道之一,则该终结点是轮询使用者。 事件驱动的使用者是那些具有调度程序而不是队列的输入通道的使用者(换句话说,它们是可订阅的)。 此类终结点没有轮询器配置,因为它们的处理程序是直接调用的。 |
在 JEE 容器中运行时,您可能需要使用 Spring 的 ,如此处所述,而不是默认的 .
为此,请为您的环境定义一个具有适当 JNDI 名称的 Bean,如以下示例所示:
|
在 JEE 容器中运行时,您可能需要使用 Spring 的 ,如此处所述,而不是默认的 .
为此,请为您的环境定义一个具有适当 JNDI 名称的 Bean,如以下示例所示:
|
当在应用程序上下文中配置自定义时(如上所述),建议为其提供 ( bean) 以便能够将异常作为框架提供的 bean 进行处理。TaskScheduler DefaultManagedTaskScheduler MessagePublishingErrorHandler integrationMessagePublishingErrorHandler ErrorMessage`s sent to the error channel, as is done with the default `TaskScheduler |
当在应用程序上下文中配置自定义时(如上所述),建议为其提供 ( bean) 以便能够将异常作为框架提供的 bean 进行处理。TaskScheduler DefaultManagedTaskScheduler MessagePublishingErrorHandler integrationMessagePublishingErrorHandler ErrorMessage`s sent to the error channel, as is done with the default `TaskScheduler |
有关详细信息,另请参阅错误处理。