Skip to content

Instantly share code, notes, and snippets.

@Omar-Salem
Created November 21, 2017 03:29
Show Gist options
  • Save Omar-Salem/0d44c9ed48d11a32cd24b147b7b4e3b0 to your computer and use it in GitHub Desktop.
Save Omar-Salem/0d44c9ed48d11a32cd24b147b7b4e3b0 to your computer and use it in GitHub Desktop.
SQS java config
import com.amazon.sqs.javamessaging.SQSConnectionFactory;
import com.amazonaws.auth.AWSCredentialsProvider;
import com.amazonaws.auth.DefaultAWSCredentialsProviderChain;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jms.listener.DefaultMessageListenerContainer;
@Configuration
public class JMSSQSConfig {
private final String endpoint;
private final String queueName;
private final AWSCredentialsProvider awsCredentialsProvider;
private final SQSListener sqsListener;
@Autowired
public JMSSQSConfig(@Value("${queue.endpoint}") String endpoint, @Value("${queue.name}") String queueName,
AWSCredentialsProvider awsCredentialsProvider, SQSListener sqsListener) {
this.endpoint = endpoint;
this.queueName = queueName;
this.awsCredentialsProvider = awsCredentialsProvider;
this.sqsListener = sqsListener;
}
@Bean
public DefaultMessageListenerContainer jmsListenerContainer() {
SQSConnectionFactory sqsConnectionFactory = SQSConnectionFactory.builder()
.withAWSCredentialsProvider(new DefaultAWSCredentialsProviderChain())
.withEndpoint(endpoint)
.withAWSCredentialsProvider(awsCredentialsProvider)
.withNumberOfMessagesToPrefetch(10).build();
DefaultMessageListenerContainer dmlc = new DefaultMessageListenerContainer();
dmlc.setConnectionFactory(sqsConnectionFactory);
dmlc.setDestinationName(queueName);
dmlc.setMessageListener(sqsListener);
return dmlc;
}
}
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.stereotype.Service;
@Service
public class MessageService {
private final JmsTemplate jmsTemplate;
private final String queueName;
@Autowired
public MessageService(JmsTemplate jmsTemplate, @Value("${queue.name}") String queueName) {
this.jmsTemplate = jmsTemplate;
this.queueName = queueName;
}
public void sendMessage(final String message) {
jmsTemplate.send(queueName, session -> session.createTextMessage(message));
}
}
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.TextMessage;
@Component
public class SQSListener implements MessageListener {
private static final Logger LOGGER = LoggerFactory.getLogger(SQSListener.class);
private final DatabaseSelector databaseSelector;
@Autowired
public SQSListener(DatabaseSelector databaseSelector) {
this.databaseSelector = databaseSelector;
}
public void onMessage(Message message) {
try {
TextMessage textMessage = (TextMessage) message;
LOGGER.info("Received message " + textMessage.getText());
databaseSelector.toggle();
LOGGER.info("current db is:" + databaseSelector.getCurrent());
} catch (JMSException e) {
throw new RuntimeException(e);
}
}
}