마지막 기사에서는 AWS 메시징 지원으로 이동합니다.

1. AWS 메시징 지원

1.1. SQS(단순 Queue 서비스)

QueueMessagingTemplate 을 사용하여 SQS Queue에 메시지를 보낼 수 있습니다 .

이 빈을 생성하기 위해 Spring Boot 스타터를 사용할 때 애플리케이션 컨텍스트에서 기본적으로 사용 가능한 AmazonSQSAsync 클라이언트를 사용할 수 있습니다.

@Bean
public QueueMessagingTemplate queueMessagingTemplate(
  AmazonSQSAsync amazonSQSAsync) {
    return new QueueMessagingTemplate(amazonSQSAsync);
}

그런 다음 convertAndSend() 메서드 를 사용하여 메시지를 보낼 수 있습니다 .

@Autowired
QueueMessagingTemplate messagingTemplate;
 
public void send(String topicName, Object message) {
    messagingTemplate.convertAndSend(topicName, message);
}

Amazon SQS는 문자열 페이로드만 허용하므로 Java 객체는 자동으로 JSON으로 직렬화됩니다.

@SqsListener 를 사용하여 리스너를 구성할 수도 있습니다 .

@SqsListener("spring-cloud-test-queue")
public void receiveMessage(String message, 
  @Header("SenderId") String senderId) {
    // ...
}

이 메서드는 spring-cloud-test-queue 에서 메시지를 수신 한 다음 처리합니다. 메소드 매개변수에 대한 @Header 어노테이션을 사용하여 메시지 헤더를 검색할 수도 있습니다 .

첫 번째 매개변수가 문자열 이 아닌 사용자 정의 Java 객체인 경우 Spring은 JSON 변환을 사용하여 메시지를 해당 유형으로 변환합니다.

1.2. SNS(간편 알림 서비스)

SQS와 마찬가지로 NotificationMessagingTemplate 을 사용 하여 주제에 메시지를 게시할 수 있습니다.

생성하려면 AmazonSNS 클라이언트가 필요합니다.

@Bean
public NotificationMessagingTemplate notificationMessagingTemplate(
  AmazonSNS amazonSNS) {
    return new NotificationMessagingTemplate(amazonSNS);
}

그런 다음 주제에 알림을 보낼 수 있습니다.

@Autowired
NotificationMessagingTemplate messagingTemplate;

public void send(String Object message, String subject) {
    messagingTemplate
      .sendNotification("spring-cloud-test-topic", message, subject);
}

AWS에서 지원하는 여러 SNS 엔드포인트(SQS, HTTP(S), 이메일 및 SMS) 중에서 프로젝트는 HTTP(S)만 지원합니다 .

MVC 컨트롤러에서 Endpoints을 구성할 수 있습니다.

@Controller
@RequestMapping("/topic-subscriber")
public class SNSEndpointController {

    @NotificationSubscriptionMapping
    public void confirmUnsubscribeMessage(
      NotificationStatus notificationStatus) {
        notificationStatus.confirmSubscription();
    }
 
    @NotificationMessageMapping
    public void receiveNotification(@NotificationMessage String message, 
      @NotificationSubject String subject) {
        // handle message
    }

    @NotificationUnsubscribeConfirmationMapping
    public void confirmSubscriptionMessage(
      NotificationStatus notificationStatus) {
        notificationStatus.confirmSubscription();
    }
}

컨트롤러 수준에서 @RequestMapping 어노테이션에 주제 이름을 추가해야 합니다 . 이 컨트롤러는 SNS 주제에서 구독을 생성하는 데 사용되는 HTTP(s) Endpoints – /topic-subscriber 를 활성화합니다.

예를 들어 다음 URL을 호출하여 주제를 구독할 수 있습니다.

https://host:port/topic-subscriber/

요청의 헤더는 세 가지 메서드 중 호출되는 메서드를 결정합니다.

@NotificationSubscriptionMapping 어노테이션이 있는 메서드 는 [x-amz-sns-message-type=SubscriptionConfirmation] 헤더 가 있고 주제에 대한 새 구독을 확인할 때 호출됩니다.

구독하면 주제가 [x-amz-sns-message-type=Notification] 헤더와 함께 엔드포인트에 알림을 보냅니다 . 그러면 @NotificationMessageMapping 어노테이션이 달린 메서드가 호출됩니다 .

마지막으로 엔드포인트가 주제에서 구독을 취소하면 [x-amz-sns-message-type=UnsubscribeConfirmation] 헤더와 함께 확인 요청이 수신됩니다 .

구독 취소 작업을 확인하는 @NotificationUnsubscribeConfirmationMapping 어노테이션이 달린 메서드를 호출합니다 .

@RequestMapping 의 값은 구독하는 주제 이름과 아무 관련이 없습니다.

2. 결론

이 마지막 기사에서는 AWS Messaging에 대한 Spring Cloud의 지원을 살펴보았으며 Spring Cloud 및 AWS에 대한 이 빠른 시리즈를 마무리합니다.

평소와 같이 예제는 GitHub 에서 사용할 수 있습니다 .

« 이전
스프링 클라우드 AWS – RDS
Cloud footer banner