Skip to content

Commit

Permalink
Merge pull request #6 from lotteon2/sqs
Browse files Browse the repository at this point in the history
✏️ sqs listener 수정
  • Loading branch information
qwerty1434 authored Dec 29, 2023
2 parents 0044cef + 2a6c205 commit 488641c
Show file tree
Hide file tree
Showing 13 changed files with 114 additions and 22 deletions.
4 changes: 2 additions & 2 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,12 +14,12 @@ jobs:
- name: Set up JDK 11
uses: actions/setup-java@v1
with:
java-version: 11
java-version: 17

# Gradle wrapper 파일 실행 권한주기
- name: Grant execute permission for gradlew
run: chmod +x gradlew

# Gradle test를 실행한다
- name: build gradle
run: ./gradlew clean build
run: ./gradlew clean build
9 changes: 6 additions & 3 deletions .github/workflows/deploy-dev.yml
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
name: develop deployment
on:
push:
branches:
- 'develop'
jobs:
build-and-push-docker-image:
deployment:
environment: develop
runs-on: ubuntu-latest
steps:
- name: Checkout
Expand All @@ -15,9 +17,10 @@ jobs:
with:
username: ${{ secrets.DEV_DOCKER_ID }}
password: ${{ secrets.DEV_DOCKER_PW }}
- name: Build and push
- name: deploy
id: docker_build
uses: docker/build-push-action@v2
with:
platforms: linux/amd64,linux/arm64
push: true
tags: nowgnas/bb:order-query
tags: nowgnas/bb:order-query
4 changes: 3 additions & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,9 @@ dependencies {
implementation 'org.springframework.cloud:spring-cloud-starter-openfeign'

// sqs
implementation 'org.springframework.cloud:spring-cloud-starter-aws:2.2.4.RELEASE'
implementation 'org.springframework.cloud:spring-cloud-aws-messaging:2.2.4.RELEASE'
implementation 'software.amazon.awssdk:sns:2.21.37'

// dynamoDB
implementation 'io.github.boostchicken:spring-data-dynamodb:5.2.5'
Expand All @@ -53,7 +55,7 @@ dependencies {
testImplementation "org.junit.jupiter:junit-jupiter:5.8.1"
testImplementation "org.testcontainers:junit-jupiter:1.16.3"

implementation group: 'io.github.lotteon-maven', name: 'blooming-blooms-utils', version: '202312220229'
implementation group: 'io.github.lotteon-maven', name: 'blooming-blooms-utils', version: '202312280417'
}

dependencyManagement {
Expand Down
2 changes: 2 additions & 0 deletions src/main/java/kr/bb/orderquery/OrderqueryApplication.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,11 @@

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.kafka.annotation.EnableKafka;

@EnableKafka
@EnableEurekaClient
@SpringBootApplication
public class OrderqueryApplication {

Expand Down
42 changes: 42 additions & 0 deletions src/main/java/kr/bb/orderquery/config/AWSConfig.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
package kr.bb.orderquery.config;

import com.amazonaws.auth.AWSStaticCredentialsProvider;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.services.sqs.AmazonSQSAsync;
import com.amazonaws.services.sqs.AmazonSQSAsyncClientBuilder;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.context.annotation.Profile;
import software.amazon.awssdk.auth.credentials.AwsBasicCredentials;
import software.amazon.awssdk.auth.credentials.AwsCredentialsProvider;

@Configuration
public class AWSConfig {
@Value("${cloud.aws.credentials.ACCESS_KEY_ID}")
private String accessKeyId;

@Value("${cloud.aws.credentials.SECRET_ACCESS_KEY}")
private String secretAccessKey;

@Value("${cloud.aws.region.static}")
private String region;

public AwsCredentialsProvider getAwsCredentials() {
AwsBasicCredentials awsBasicCredentials =
AwsBasicCredentials.create(accessKeyId, secretAccessKey);
return () -> awsBasicCredentials;
}

@Primary
@Bean
public AmazonSQSAsync amazonSQSAsync() {
BasicAWSCredentials basicAWSCredentials = new BasicAWSCredentials(accessKeyId, secretAccessKey);
return AmazonSQSAsyncClientBuilder.standard()
.withRegion(region)
.withCredentials(new AWSStaticCredentialsProvider(basicAWSCredentials))
.build();
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
import bloomingblooms.domain.StatusChangeDto;
import bloomingblooms.domain.pickup.PickupCreateDto;
import bloomingblooms.domain.store.StoreNameAndAddressDto;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import kr.bb.orderquery.client.StoreFeignClient;
import kr.bb.orderquery.domain.pickup.controller.response.PickAndSubResponse;
import kr.bb.orderquery.domain.pickup.controller.response.PickupsForDateResponse;
Expand All @@ -29,6 +31,7 @@ public class PickupFacade {
private final PickupService pickupService;
private final SubscriptionService subscriptionService;
private final StoreFeignClient storeFeignClient;
private final ObjectMapper objectMapper;

@KafkaListener(topics = "pickup-create", groupId = "pick-create")
public void create(PickupCreateDto pickupCreateDto) {
Expand All @@ -46,7 +49,8 @@ public void updateReservationStatus(StatusChangeDto statusChangeDto) {
value = "${cloud.aws.sqs.pickup-card-status-queue.name}",
deletionPolicy = SqsMessageDeletionPolicy.NEVER
)
public void updateCardStatus(@Payload StatusChangeDto statusChangeDto, Acknowledgment ack) {
public void updateCardStatus(@Payload String message, Acknowledgment ack) throws JsonProcessingException {
StatusChangeDto statusChangeDto = objectMapper.readValue(message, StatusChangeDto.class);
pickupService.updateCardStatus(statusChangeDto.getId(), statusChangeDto.getStatus());
ack.acknowledge();
}
Expand All @@ -55,7 +59,8 @@ public void updateCardStatus(@Payload StatusChangeDto statusChangeDto, Acknowled
value = "${cloud.aws.sqs.pickup-review-status-queue.name}",
deletionPolicy = SqsMessageDeletionPolicy.NEVER
)
public void updateReviewStatus(@Payload StatusChangeDto statusChangeDto, Acknowledgment ack) {
public void updateReviewStatus(@Payload String message, Acknowledgment ack) throws JsonProcessingException {
StatusChangeDto statusChangeDto = objectMapper.readValue(message, StatusChangeDto.class);
pickupService.updateReviewStatus(statusChangeDto.getId(), statusChangeDto.getStatus());
ack.acknowledge();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
import bloomingblooms.domain.StatusChangeDto;
import bloomingblooms.domain.subscription.SubscriptionCreateDto;
import bloomingblooms.domain.subscription.SubscriptionDateDto;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import kr.bb.orderquery.client.ProductFeignClient;
import bloomingblooms.domain.product.ProductInfoDto;
import kr.bb.orderquery.domain.subscription.controller.response.SubscriptionsForDateResponse;
Expand All @@ -25,6 +27,7 @@
public class SubscriptionFacade {
private final SubscriptionService subscriptionService;
private final ProductFeignClient productFeignClient;
private final ObjectMapper objectMapper;

@KafkaListener(topics = "subscription-create", groupId = "sub-create")
public void create(SubscriptionCreateDto subscriptionCreateDto) {
Expand All @@ -46,7 +49,8 @@ public void unSubscribe(String subscriptionId) {
value = "${cloud.aws.sqs.subscription-review-status-queue.name}",
deletionPolicy = SqsMessageDeletionPolicy.NEVER
)
public void updateReviewStatus(@Payload StatusChangeDto statusChangeDto, Acknowledgment ack) {
public void updateReviewStatus(@Payload String message, Acknowledgment ack) throws JsonProcessingException {
StatusChangeDto statusChangeDto = objectMapper.readValue(message, StatusChangeDto.class);
subscriptionService.updateReviewStatus(statusChangeDto.getId(), statusChangeDto.getStatus());
ack.acknowledge();
}
Expand Down
8 changes: 4 additions & 4 deletions src/test/java/kr/bb/orderquery/AbstractContainer.java
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
package kr.bb.orderquery;

import org.junit.ClassRule;
import org.springframework.test.context.ActiveProfiles;
import org.springframework.test.context.DynamicPropertyRegistry;
import org.springframework.test.context.DynamicPropertySource;
import org.testcontainers.containers.GenericContainer;

@ActiveProfiles("test")
public abstract class AbstractContainer {
static final String DYNAMODB_IMAGE = "amazon/dynamodb-local:2.1.0";

@ClassRule
static final GenericContainer DYNAMODB_CONTAINER;

static {
Expand All @@ -23,7 +23,7 @@ public static void overrideProps(DynamicPropertyRegistry registry) {
final String endpoint =
String.format("http://%s:%s", DYNAMODB_CONTAINER.getHost(), DYNAMODB_CONTAINER.getMappedPort(8000));
registry.add("aws.dynamodb.endpoint", () -> endpoint);
registry.add("cloud.aws.credentials.ACCESS_KEY_ID", () -> "testkey");
registry.add("cloud.aws.credentials.SECRET_ACCESS_KEY", () -> "testkey");
registry.add("cloud.aws.credentials.ACCESS_KEY_ID", () -> "test");
registry.add("cloud.aws.credentials.SECRET_ACCESS_KEY", () -> "test");
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,16 +18,21 @@
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.cloud.aws.messaging.listener.SimpleMessageListenerContainer;
import org.springframework.test.context.ActiveProfiles;
import org.testcontainers.junit.jupiter.Testcontainers;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;
import java.util.UUID;

@ActiveProfiles("local")
@Testcontainers
@SpringBootTest
class PickupFacadeTest extends AbstractContainer {
@MockBean
SimpleMessageListenerContainer simpleMessageListenerContainer;
@Autowired
private PickupFacade pickupFacade;
@Autowired
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,13 @@
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.cloud.aws.messaging.listener.SimpleMessageListenerContainer;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.test.context.ActiveProfiles;
import org.testcontainers.junit.jupiter.Testcontainers;

import java.time.LocalDate;
import java.time.LocalDateTime;
Expand All @@ -35,9 +38,11 @@

import static org.assertj.core.api.Assertions.assertThat;

@ActiveProfiles("local")
@Testcontainers
@SpringBootTest
class PickupServiceTest extends AbstractContainer {
@MockBean
SimpleMessageListenerContainer simpleMessageListenerContainer;
@Autowired
private PickupService pickupService;
@Autowired
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,10 @@
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.cloud.aws.messaging.listener.SimpleMessageListenerContainer;
import org.springframework.test.context.ActiveProfiles;
import org.testcontainers.junit.jupiter.Testcontainers;

import java.time.LocalDate;
import java.time.LocalDateTime;
Expand All @@ -24,9 +27,11 @@

import static org.assertj.core.api.Assertions.assertThat;

@ActiveProfiles("local")
@Testcontainers
@SpringBootTest
class SubscriptionReaderTest extends AbstractContainer {
@MockBean
SimpleMessageListenerContainer simpleMessageListenerContainer;
@Autowired
private SubscriptionReader subscriptionReader;
@Autowired
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,10 @@
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.cloud.aws.messaging.listener.SimpleMessageListenerContainer;
import org.springframework.test.context.ActiveProfiles;
import org.testcontainers.junit.jupiter.Testcontainers;

import java.time.LocalDate;
import java.time.LocalDateTime;
Expand All @@ -31,9 +34,11 @@

import static org.assertj.core.api.Assertions.assertThat;

@ActiveProfiles("local")
@Testcontainers
@SpringBootTest
class SubscriptionServiceTest extends AbstractContainer {
@MockBean
SimpleMessageListenerContainer simpleMessageListenerContainer;
@Autowired
private SubscriptionService subscriptionService;
@Autowired
Expand Down
24 changes: 19 additions & 5 deletions src/test/resources/application.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
spring:
config:
activate:
on-profile: "test"
cloud:
config:
enabled: false
Expand All @@ -7,10 +10,21 @@ cloud:
stack:
auto: false
region:
static: ap-northeast-1
static: "ap-northeast-1"
credentials:
ACCESS_KEY_ID: "test"
SECRET_ACCESS_KEY: "test"
ACCESS_KEY_ID: ""
SECRET_ACCESS_KEY: ""
sqs:
pickup-review-status-queue:
name: ""
pickup-card-status-queue:
name: ""
subscription-review-status-queue:
name: ""
endpoint:
product-service: localhost:8800
store-service: localhost:8500
product-service: ""
store-service: ""

aws:
dynamodb:
endpoint: ""

0 comments on commit 488641c

Please sign in to comment.