파이썬으로 살펴보는 아키텍처 패턴 - 9장 (메시지 버스를 타고 시내로 나가기)

이동욱

2022/01/05

서비스 함수를 메시지 핸들러로 리팩터리 하기


def add_batch(
        event: events.BatchCreated, uow: unit_of_work.AbstractUnitOfWork):
    with uow:
        product = uow.products.get(sku=event.sku)
        ...


def allocate(
        event: events.AllocationRequired, uow: unit_of_work.AbstractUnitOfWork
) -> str:
    line = OrderLine(event.orderid, event.sku, event.qty)
    ...


def send_out_of_stock_notification(
        event: events.OutOfStock, uow: unit_of_work.AbstractUnitOfWork
):
    email.send(
        'stock@made.com',
        f'Out of stock for {event.sku}',
    )
    ...
@app.route("/allocate", methods=["POST"])
def allocate_endpoint():
    try:
        event = events.AllocationRequired(
            request.json['orderid'], request.json['sku'], request.json['qty']
        )
        results = messagebus.handle(event, unit_of_work.SqlAlchemyUnitOfWork())
        batchref = results.pop(0)
    except services.InvalidSku as e:
        return {"message": str(e)}, 400

    return {"batchref": batchref}, 201

이벤트 기반 아키텍처 패턴을 채택하는 이유


전체 애플리케이션이 메시지 버스인 경우 장/단점

참고 문헌


>> Home