23.06.15
DEVOTEE를 활성화 시키면
지금 작성한 커뮤니티 글에 대해 1개의 댓글을 달아줍니다.
버튼을 누르면 글 수정 시 ChatGPT가 작성한 댓글이 수정됩니다.
| 컨텐츠 유형 | 제목 | 저장일 | 삭제 |
|---|
본인인증 로그인에 실패하였습니다.
회원이 아니시거나 본인인증 등록이
완료되지 않은 사용자입니다.
<dependencyManagement> <dependencies> <dependency> <groupId>io.awspring.cloud</groupId> <artifactId>spring-cloud-aws-dependencies</artifactId> <version>2.3.0</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
<dependencies> <dependency> <groupId>io.awspring.cloud</groupId> <artifactId>spring-cloud-starter-aws-messaging</artifactId> </dependency> </dependencies>
package com.schooldevops.sqs.jms;
import io.awspring.cloud.messaging.core.QueueMessagingTemplate;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.messaging.Message;
import org.springframework.messaging.support.MessageBuilder;
import org.springframework.stereotype.Service;
@Slf4j
@Service
public class MessageSenderWithTemplate {
private static final String QUEUE = "my-todo2";
@Autowired
private QueueMessagingTemplate messagingTemplate;
public void send(String messagePayload) {
Message msg = MessageBuilder.withPayload(messagePayload)
.setHeader("sender", "app1")
.build();
messagingTemplate.convertAndSend(QUEUE, msg);
log.info("message sent");
}
public void sendToFifoQueue(String messagePayload, String messageGroupID, String messageDedupID) {
Message msg = MessageBuilder.withPayload(messagePayload)
.setHeader("message-group-id", messageGroupID)
.setHeader("message-deduplication-id", messageDedupID)
.build();
messagingTemplate.convertAndSend(QUEUE, msg);
log.info("message sent");
}
}
@Autowired
private QueueMessagingTemplate messagingTemplate;
Message msg = MessageBuilder.withPayload(messagePayload)
.setHeader("sender", "app1")
.build();
위 코드는 헤더로 sender: app1 으로 지정했다.
withPayload에 실제 전송할 메시지를 담는다.
그리고 아래와 같이 Queue이름을 지정하고, 메시지를 전송한다.
messagingTemplate.convertAndSend(QUEUE, msg);
Message msg = MessageBuilder.withPayload(messagePayload)
.setHeader("message-group-id", messageGroupID)
.setHeader("message-deduplication-id", messageDedupID)
.build();
Fifoqueue는 "message-group-id" 로 메시지 그루핑이 필요하다.
또한 message-deduplication-id 를 지정하여 중복을 제거한다. 중복을 구분할 내용은 메시지 중복 키를 받아서 전송하고 있다.
그리고 메시지 전송은 동일하게 전송한다. 큐 이름과, 메시지를 담아서 보낸다.
package com.schooldevops.sqs.jms;
import com.amazonaws.services.sqs.AmazonSQSAsync;
import io.awspring.cloud.messaging.core.QueueMessageChannel;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.messaging.Message;
import org.springframework.messaging.MessageChannel;
import org.springframework.messaging.support.MessageBuilder;
import org.springframework.stereotype.Service;
@Service
public class MessageSender {
private static final Logger logger = LoggerFactory.getLogger(MessageSender.class);
private static final String QUEUE_NAME = "https://sqs.ap-northeast-2.amazonaws.com/103382364946/my-todo2";
@Autowired
private final AmazonSQSAsync amazonSqs;
@Autowired
public MessageSender(final AmazonSQSAsync amazonSQSAsync) {
this.amazonSqs = amazonSQSAsync;
}
public boolean send(String messagePayload) {
MessageChannel messageChannel = new QueueMessageChannel(amazonSqs, QUEUE_NAME);
Message msg = MessageBuilder.withPayload(messagePayload)
.setHeader("sender", "app1")
.build();
long waitTimeoutMillis = 5000;
boolean sentStatus = messageChannel.send(msg,waitTimeoutMillis);
logger.info("message sent");
return sentStatus;
}
}
private static final String QUEUE_NAME = "https://sqs.ap-northeast-2.amazonaws.com/103382364946/my-todo2";
@Autowired
private final AmazonSQSAsync amazonSqs;
MessageChannel messageChannel = new QueueMessageChannel(amazonSqs, QUEUE_NAME);
Message msg = MessageBuilder.withPayload(messagePayload)
.setHeader("sender", "app1")
.build();
long waitTimeoutMillis = 5000;
boolean sentStatus = messageChannel.send(msg, waitTimeoutMillis);
package com.schooldevops.sqs.jms;
import io.awspring.cloud.messaging.listener.SqsMessageDeletionPolicy;
import io.awspring.cloud.messaging.listener.annotation.SqsListener;
import lombok.extern.slf4j.Slf4j;
import org.springframework.messaging.handler.annotation.Header;
import org.springframework.stereotype.Service;
@Slf4j
@Service
public class MessageReceiver {
@SqsListener(value = "my-todo2", deletionPolicy = SqsMessageDeletionPolicy.ON_SUCCESS )
public void receiveStringMessage(String message,
@Header("SenderId") String senderId) {
log.info("message received {} {}",senderId,message);
}
}
cloud.aws.credentials.profile-name=terraform_user cloud.aws.region.auto=false cloud.aws.region.static=ap-northeast-2
package com.schooldevops.sqs.jms.controllers;
import com.schooldevops.sqs.jms.MessageSender;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
@Slf4j
@RestController
public class MessageController {
@Autowired
MessageSender messageSender;
@PostMapping("/message/{msg}")
public String sendMessage(@PathVariable("msg") String message) {
messageSender.send(message);
log.info("Sent Message : {}", message);
return message;
}
}
curl -X POST http://localhost:8080/message/Hello-THUB
2021-08-12 18:09:01.235 INFO 30312 --- [ main] c.s.sqs.jms.MessageSenderWithTemplate : message sent
2021-08-12 18:09:01.269 INFO 30312 --- [enerContainer-2] c.schooldevops.sqs.jms.MessageReceiver : message received AIDARQEQRWMJJSR7Q72NQ {"payload":"Hello queue","headers":{"id":"f1db446c-da77-9f36-2ec6-fdbb2d1d445e","sender":"app1","timestamp":1628759340901}}
DEVOTEE를 활성화 시키면
지금 작성한 댓글에 AI가 댓글을 달아줍니다.