У меня есть 2 AWS SQS, в которых один содержит Activity, а другой содержит информацию о вложениях, у меня есть JmsSqsListener и ActivitySqsConfig, как показано ниже.
Использование DefaultMessageListenerContainer Я могу настроить только один JmsSqsListener одновременно либо дляАктивность или вложение, но я хочу настроить JmsSqsListener как для SQS, так и для DefaultMessageListenerContainer, что мне этого не позволяет.Я также настраиваю две разные конфигурации JmsSqsListener, используя разные классы, но даже это не сработало.Он просто слушает только одну очередь.
@Configuration
public class JmsSqsListener {
@Value("${aws.access.key}")
private String accessKey;
@Value("${aws.secret.key}")
private String secretKey;
@Value("${aws.queue.region}")
private String region;
@Value("${leaks.activity.queue}")
private String activityQueue;
@Value("${leaks.attachment.queue}")
private String attachmentQueue;
@Autowired
private ActivityEngine activityListener;
@Autowired
private AttachmentEngine attachmentListener; // How to add Listener for attachmentQueue
@Bean
public DefaultMessageListenerContainer jmsListenerContainer() {
SQSConnectionFactory sqsConnectionFactory = new SQSConnectionFactory(new ProviderConfiguration(),
AmazonSQSClientBuilder.standard().withRegion(region).withCredentials(awsCredentialsProvider));
DefaultMessageListenerContainer dmlc = new DefaultMessageListenerContainer();
dmlc.setConnectionFactory(sqsConnectionFactory);
dmlc.setDestinationName(activityQueue);// Also want to add attachmentQueue
dmlc.setMessageListener(activityListener); // Also want to add attachmentListener
return dmlc;
}
@Bean
public JmsTemplate createJMSTemplate() {
SQSConnectionFactory sqsConnectionFactory = new SQSConnectionFactory(new ProviderConfiguration(),
AmazonSQSClientBuilder.standard().withRegion(region).withCredentials(awsCredentialsProvider));
JmsTemplate jmsTemplate = new JmsTemplate(sqsConnectionFactory);
jmsTemplate.setDefaultDestinationName(queueName);
jmsTemplate.setDeliveryPersistent(false);
return jmsTemplate;
}
private final AWSCredentialsProvider awsCredentialsProvider = new AWSCredentialsProvider() {
@Override
public AWSCredentials getCredentials() {
return new BasicAWSCredentials(accessKey, secretKey);
}
@Override
public void refresh() { }
};
}
Конфигурация SQS
@Configuration
public class SqsConfig {
@Value("${aws.access.key}")
private String accessKey;
@Value("${aws.secret.key}")
private String secretKey;
@Value("${aws.queue.endpoint}")
private String endpoint;
@Value("${aws.queue.region}")
private String region;
@Value("${leaks.activity.queue}")
private String activityQueue;
@Value("${leaks.attachment.queue}")
private String attachmentQueue;
@Bean
public AmazonSQS createSQSClient() {
AmazonSQSClientBuilder builder = AmazonSQSClientBuilder.standard().withCredentials(awsCredentialsProvider);
builder.setEndpointConfiguration(new EndpointConfiguration(endpoint, region));
AmazonSQS amazonSQSClient = builder.build();
amazonSQSClient.createQueue(activityQueue); // want to create attachmentQueue also
return amazonSQSClient;
}
private final AWSCredentialsProvider awsCredentialsProvider = new AWSCredentialsProvider() {
@Override
public AWSCredentials getCredentials() {
return new BasicAWSCredentials(accessKey, secretKey);
}
@Override
public void refresh() { }
};
}
Пожалуйста, помогите мне настроить прослушиватели JMS, чтобы 1) ActivityEngine мог слушать ActivityQueue и одновременно 2)AttachmentEngine может прослушивать attachmentQueue;