@EnableJms
@Configuration
public class SqsConfig {
@Bean
public SQSConnectionFactory sqsConnectionFactory(SqsProperties sqsProperties) {
AmazonSQS sqs = AmazonSQSClientBuilder.standard().withRegion(
String.valueOf(RegionUtils.getRegion(sqsProperties.getRegion()))).build();
return new SQSConnectionFactory(new ProviderConfiguration(),sqs);
}
@Bean
public DefaultJmsListenerContainerFactory jmsListenerContainerFactory(
SQSConnectionFactory connectionFactory,MessageConverter messageConverter,ErrorHandler errorHandler,SqsProperties sqsProperties) {
DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
factory.setConnectionFactory(connectionFactory);
factory.setDestinationResolver(new DynamicDestinationResolver());
factory.setConcurrency(sqsProperties.getconcurrency());
// factory.setMessageConverter(messageConverter);
factory.setSessionAcknowledgeMode(Session.CLIENT_ACKNOWLEDGE);
factory.setErrorHandler(errorHandler);
return factory;
}
@Bean
public MessageConverter messageConverter(ObjectMapper objectMapper) {
MappingJackson2MessageConverter mappingJackson2MessageConverter = new MappingJackson2MessageConverter();
mappingJackson2MessageConverter.setObjectMapper(objectMapper);
mappingJackson2MessageConverter.setTargetType(MessageType.TEXT);
mappingJackson2MessageConverter.setTypeIdPropertyName("_type");
return mappingJackson2MessageConverter;
}
}
@Component
@RequiredArgsConstructor
public class SqsMessageListener {
private final Subscriptionmapper subscriptionmapper;
private final SubscriptionService subscriptionService;
private final snsProducer snsProducer;
@JmsListener(destination = "${aws.sqs.createSubscription}")
public void createSubscription(String receivedMsg) {
System.out.println(receivedMsg);
}
@JmsListener(destination = "${aws.sqs.cancelSubscription}")
public void cancelSubscription(String receivedMsg) {
System.out.println(receivedMsg);
}
}
在我的项目中,我使用SQS AWS添加了两个不同的JmsListener
所以我应该为每个JmsListener添加单独的jmsListenerContainerFactory配置
AmazonClientException:receiveMessage 无法执行HTTP请求:超时等待来自池的连接