Spring Boot Cloud AWS SQS Kullanımı
Spring Cloud Dersleri‘ne devam ediyorum.
Spring Cloud ile AWS servislerinden biri olan SQS kullanımını ile ilgili bir örnek yapacağım. Spring Cloud ile geliştireceğimiz bu uygulamanın kaynak kodlarını Github adresimden ya da yazının sonundaki linkten erişebilirsiniz. AWS SQS’in ne olduğunu ve nasıl kullanıldığı ile alakalı yazıma aşağıdan ulabilirsiniz.
İlgini Çekebilir: Amazon Web Service Simple Queue Service (SQS) Nedir
Yapacağımız uygulamada bir Müşteri kayıt olduktan sonra SQS aracılığı ile diğer servisi bilgilendirip mail atacak bir uygulama yapcağız.
AWS SQS Oluşturmak
AWS Sqs paneline girerek bir SQS olşuturuyoruz. Burada standart olarak seçiyorum ve adına Register- Queue diyorum.
Konfigürasyon kısmında mesajın görüntüleme süresi, boyutu, gecikme süresi gibi değerleri değiştirebiliyoruz ancak default ayarları ile devam ediyorum. Bu işlemi tamamladıktan sonra bir SQS için gerekli bir url ya da aim bilgilerini görüntüleyebiliriz.
https://sqs.<region>.amazonaws.com/<amazon_id>/Register-Queue
Code language: HTML, XML (xml)
SQS Kullanıcısı Oluşturma
Aws SQS kullanıcı oluşturarak oluşturacağımız kullanıcının access key ve secret key lerini uygulamamıza girmemiz gerekmektedir. Bu yüzden aşağıdaki adımları uygulayacağız
Kullanıcı oluşturduktan sonra bir grupa aktarıyoruz.
Ardından Access Key ve Secret Key‘ler ugyulamamız için gerekli olacak.
Spring Cloud ile AWS SQS Örnek Uygulaması
Uygulamamız için kullacanağımız kütüphanelerimizi ekleyelim.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-aws-messaging</artifactId>
<version>2.2.6.RELEASE</version>
</dependency>
Code language: HTML, XML (xml)
Spring Cloud Starter AWS Messaging kütüphanesi sayesinde Aws SQS kullanabileceğiz.
Projemize config sınıfı ekleyeceğiz. Bu sınıf içerisinde SQS kullanacağımızı belirteceğiz ve access ve secret keylerimiz ile birlikte region bilgisini de credential olarak veriyoruz.
@Configuration
public class SQSConfig {
@Value("${accessKey}")
private String accessKey;
@Value("${secretKey}")
private String secretKey;
@Bean
public QueueMessagingTemplate queueMessagingTemplate() {
return new QueueMessagingTemplate(amazonSQSAsync());
}
@Bean
@Primary
public AmazonSQSAsync amazonSQSAsync() {
return AmazonSQSAsyncClientBuilder.standard().withRegion(Regions.US_EAST_1)
.withCredentials(new AWSStaticCredentialsProvider(new BasicAWSCredentials(accessKey, secretKey)))
.build();
}
}
Code language: CSS (css)
application.properties
dosyamıza aws credential bilgilerimizi sqs urlimizin tanımlamalarını yapalım.
accessKey=************
secretKey=***********
sqs.url=https://sqs.us-east-1.amazonaws.com/*********/Register-Queue
Code language: JavaScript (javascript)
Bu bilgilerimizi de tanımladıktan SQS’e kişi bilgisini gönderecek olan sender sınıfımızı yazalım.
@Service
public class MessageSender {
@Autowired
private AmazonSQSAsync sqs;
@Value("${sqs.url}")
private String sqsUrl;
public void sendToSqs(String customerName) {
sqs.sendMessage(sqsUrl, customerName);
}
}
Code language: PHP (php)
Verdiğimiz config bilgileri ile birlikte url bilgisini alarak sendMessage
metoduna vererek gönderme işlemini tamamlamış oluyoruz.
Bu metota değerleri gönderecek rest apimizi de oluşturalım.
@RestController
public class RegisterController {
private final MessageSender messageSender;
public RegisterController(MessageSender messageSender) {
this.messageSender = messageSender;
}
@PostMapping("/register/{name}")
public ResponseEntity<String> register(@PathVariable("name") String customerName) {
messageSender.sendToSqs(customerName);
return new ResponseEntity<>("Message Published", HttpStatus.OK);
}
}
Code language: PHP (php)
Bu endpointten bir isim alacağız ve bu ismi SQS ile gönderip, consum edip konsolda yazdırmış olacağız. Senderden giden mesajı SQS’den dinleyen sınıfımızı yapalım.
@Service
public class MessageConsumer {
@SqsListener(value = "Register-Queue", deletionPolicy = SqsMessageDeletionPolicy.ON_SUCCESS)
public void myConsumer(String customerName) {
System.out.println("Hoşgeldin :" + customerName);
}
Code language: CSS (css)
SqsListener
anotasyonu sayesinde dinlememiz gereken queue
yazıyoruz ve silme policy belirlememiz yeterli olmakta.
Gelen mesajı dinleyerek konsola yazıyoruz. Çıktımız aşağıdaki gibi olacaktır.
Hoşgeldin Burak Kutbay
Sonraki Spring Cloud Dersleri’nde görüşmek üzere.
No Comment! Be the first one.