Arşivler

Spring Boot Cloud AWS SQS Kullanımı

Spring Cloud Aws SQS Uygulama Örneği
Spring Cloud Aws SQS Uygulama Örneği

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.

Spring Cloud AWS SQS Dersleri
Spring Cloud AWS SQS Dersleri

AWS SQS Oluşturmak

Amazon Web Services Simple Queue Service Nedir Kullanımı
Amazon Web Services Simple Queue Service

AWS Sqs paneline girerek bir SQS olşuturuyoruz. Burada standart olarak seçiyorum ve adına Register- Queue diyorum.

Aws SQS Oluşturmak
AWS SQS Oluşturmak

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-QueueCode 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

AWS SQS Kullanıcı Oluşturma
AWS SQS Kullanıcı Oluşturma

Kullanıcı oluşturduktan sonra bir grupa aktarıyoruz.

blank
Aws Sqs Grup Ekleme

Ardından Access Key ve Secret Key‘ler ugyulamamız için gerekli olacak.

blank
AWS SQS Kullanıcı Access Key Oluşturma

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-QueueCode 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


Projenin Kaynak Kodlarına Ulaş


Sonraki Spring Cloud Dersleri’nde görüşmek üzere.


Önceki Ders: Spring Cloud Config Server NedirSpring Cloud Dersleri Sonraki Ders: Spring Cloud @Retryable Anotasyonu