![](/img/trans.png)
[英]What are impact to my spring boot application if I have task executor
[英]Task executor in Spring Boot
在我的Spring Boot應用程序中,我正在偵聽消息隊列。 當出現一條消息時,我需要在某些任務執行器中同步執行該操作(一個接一個)。
我正在使用Amazon SQS,這是我的配置:
/**
* AWS Credentials Bean
*/
@Bean
public AWSCredentials awsCredentials() {
return new BasicAWSCredentials(accessKey, secretAccessKey);
}
/**
* AWS Client Bean
*/
@Bean
public AmazonSQS amazonSQSAsyncClient() {
AmazonSQS sqsClient = new AmazonSQSClient(awsCredentials());
sqsClient.setRegion(Region.getRegion(Regions.US_EAST_1));
return sqsClient;
}
/**
* AWS Connection Factory
*/
@Bean
public SQSConnectionFactory connectionFactory() {
SQSConnectionFactory.Builder factoryBuilder = new SQSConnectionFactory.Builder(
Region.getRegion(Regions.US_EAST_1));
factoryBuilder.setAwsCredentialsProvider(new AWSCredentialsProvider() {
@Override
public AWSCredentials getCredentials() {
return awsCredentials();
}
@Override
public void refresh() {
}
});
return factoryBuilder.build();
}
/**
* Registering QueueListener for queueName
*/
@Bean
public DefaultMessageListenerContainer defaultMessageListenerContainer() {
DefaultMessageListenerContainer messageListenerContainer = new DefaultMessageListenerContainer();
messageListenerContainer.setConnectionFactory(connectionFactory());
messageListenerContainer.setMessageListener(new MessageListenerAdapter(new QueueListener()));
messageListenerContainer.setDestinationName(queueName);
return messageListenerContainer;
}
另外,我還需要檢查此任務執行器的狀態,例如-計划任務的數量。
為此目的使用Spring SyncTaskExecutor
是個好主意嗎? 如果是這樣,請您舉例說明如何將其與Spring Boot結合使用。
編輯:
揭示了消息傳遞技術和Spring的配置之后,最簡單的方法是將SyncTaskExecutor
(或Executors.newFixedThreadPool(1)
也可以完成此工作)配置為DefaultMessageListenerContainer
執行者。 使用此方法 。
您可以將Task executor注冊為單獨的bean(通過@Bean批注),並將其自動連接到defaultMessageListenerContainer()
方法(只需將TaskExectuor
添加為參數)。
下面的答案與JMS消息傳遞有關。 它是在有問題的AWS SQS使用情況披露之前創建的:
您沒有提到要使用哪種消息傳遞技術,因此我假設使用JMS。
如果需要同步執行,我相信您不能使用本機JMS偵聽器(需要避免SimpleJmsListenerContainerFactory
或SimleMessageListenerContainer
)。
相反,我建議將@JmsListener
批注與DefaultJmsListenerContainerFactory
(這將使用長輪詢而不是本機JMS偵聽器)一起使用,並配置SyncTaskExecutor
(或Executors.newFixedThreadPool(1)
也會執行此工作)作為上述容器工廠的執行者: DefaultJmsListenerContainerFactory.setTaskExecutor()
。
這是配置了DefaultJmsListenerContainerFactory的簡單Spring Boot JMS示例 。 您只需要插入合適的任務執行器即可。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.