마지막 기사에서는 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 에서 사용할 수 있습니다 .