Node.js 전자상거래 플랫폼에서 이벤트를 처리하는 방법

Medusa은 훌륭한 개발자 경험을 제공하는 동시에 판매자의 전자상거래 경험을 향상시키는 다양한 기능을 갖춘 오픈 소스 전자상거래 플랫폼입니다.

헤드리스 상거래 플랫폼인 Medusa의 서버 아키텍처는 목적과 용도가 다른 몇 가지 구성 요소로 구성됩니다.

이 기사는 특히 구독자, 구독자의 목적 및 Medusa에서 이벤트를 처리하는 데 사용할 수 있는 방법에 중점을 둡니다.

개요



Medusa에는 특정 동작이 발생할 때 발생하는 이벤트가 있습니다. 예를 들어 고객이 주문하면 주문 데이터와 함께 order.placed 이벤트가 발생합니다.

이러한 이벤트는 플랫폼의 다른 부분 또는 타사 통합에서 이를 수신하고 그에 따라 조치를 취할 수 있도록 설계되었습니다.

구독자는 이벤트에 대한 처리기를 등록하고 해당 이벤트가 발생할 때 작업을 수행할 수 있습니다. 예를 들어 고객이 주문할 때 이메일을 보내려는 경우 order.placed 이벤트를 수신하고 이벤트가 발생하면 이메일을 보낼 수 있습니다.

기본적으로 Medusa에는 다양한 이벤트를 처리하는 구독자가 있습니다. 그러나 고유한 사용자 지정 구독자를 만들 수도 있습니다.

맞춤 구독자는 프로젝트의 src/subscribers 디렉토리에 있습니다. 여기에 있는 파일은 Medusa에서 구독자로 처리되는 클래스를 내보내야 합니다. 규칙에 따라 클래스 이름은 Subscriber 로 끝나야 하며 파일 이름은 Subscriber 없이 클래스 이름의 카멜 표기 버전이어야 합니다. 예를 들어, WelcomeSubscriber 클래스는 src/subscribers/welcome.js 파일에 있습니다.

이벤트가 발생할 때마다 구독자의 등록된 핸들러 메서드가 실행됩니다. 핸들러 메서드는 이벤트와 관련된 데이터를 보유하는 개체를 매개 변수로 받습니다. 예를 들어 주문이 접수되면 order.placed 이벤트가 발생하고 모든 핸들러는 매개변수 객체에서 주문 ID를 수신합니다.

전제 조건



Medusa의 이벤트 시스템은 각 핸들러가 알림을 받는 Queue에 데이터를 푸시하여 작동합니다. 대기열 시스템은 Redis를 기반으로 하므로 Medusa 프로젝트에 Redis이 설치 및 구성되어 있는지 확인해야 합니다.

그런 다음 Medusa 서버에서 Redis URL을 설정해야 합니다. 기본적으로 Redis URL은 redis://localhost:6379 입니다. 다른 것을 사용하는 경우 .env에서 다음 환경 변수를 설정합니다.

REDIS_URL=<YOUR_REDIS_URL>


그런 다음 medusa-config.js에서 다음 행을 주석 처리해야 합니다.

module.exports = {
  projectConfig: {
    redis_url: REDIS_URL, //this line is commented out
    ...
  }
}


그런 다음 서버에서 이벤트를 수신할 수 있습니다.

사용자 지정 구독자를 만드는 방법


src/subscribers 아래에 파일을 생성한 후 구독자의 생성자에서 eventBusService.subscribe를 사용하여 이벤트를 수신해야 합니다. 여기서 eventBusService는 구독자의 생성자에 삽입된 서비스입니다.
eventBusService.subscribe 메서드는 이벤트 이름을 첫 번째 매개변수로 사용하고 콜백 함수를 두 번째 매개변수로 사용합니다. 이 콜백은 이벤트가 실행될 때 실행됩니다.

예를 들어, 다음은 OrderNotifierSubscriber에서 생성된 src/subscribers/orderNotifier.js 클래스입니다.

class OrderNotifierSubscriber {
  constructor({ eventBusService }) {
    eventBusService.subscribe("order.placed", this.handleOrder);
  }

  handleOrder = async (data) => {
    console.log("New Order: " + data.id)
  };
}

export default OrderNotifierSubscriber;


이 구독자는 메서드handleOrderorder.placed 이벤트의 핸들러 중 하나로 등록합니다. 메소드handleOrder는 주문이 접수될 때마다 실행되며 data 매개변수에서 주문 ID를 수신합니다. 그런 다음 주문 세부 정보를 사용하여 필요한 작업을 수행할 수 있습니다.

The data object will not contain other order data. Only the ID of the order. You can retrieve the order information using the orderService.



가입자의 서비스 사용



구독자의 생성자에 주입된 종속성을 통해 anyservice에 액세스할 수 있습니다.

예를 들어:

constructor({ productService, eventBusService }) {
    this.productService = productService;

    eventBusService.subscribe("order.placed", this.handleOrder);
}


그런 다음 구독자 방법의 어느 곳에서나 this.productService를 사용할 수 있습니다.

결론



구독자는 Medusa 아키텍처의 한 부분일 뿐입니다. 다음은 Medusa로 더 많은 작업을 수행하도록 안내할 수 있는 몇 가지 문서입니다.
  • StorefrontAdmin에 대한 엔드포인트를 추가하는 방법
  • What are Services and how to create a custom service
  • How to create a payment provider

  • Should you have any issues or questions related to Medusa, then feel free to reach out to the Medusa team via Discord.

    좋은 웹페이지 즐겨찾기