![](/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.