2012-01-06 3 views
0

주문을 생성 할 수있는 주문 웹 서비스가 있습니다. 메소드가 호출 될 때, 메시지는 서비스 버스로 전송되고 주문 메시지 핸들러에 의해 처리됩니다.메시지 기반 아키텍처에서 예약 된 작업을 설계하는 방법은 무엇입니까?

일일 및 월 단위로 주문 보고서를 생성해야합니다. 일반적으로 주문 메시지 처리기에 데이터베이스에 주문을 저장 한 다음 데이터베이스에서 읽고 보고서를 생성하는 예약 된 작업이 있습니다. 그러나 이것을하기위한 메시지 지향적 인 방법이 더 있는지 궁금합니다.

주문 메시지 처리기가 다양한보고 서비스 (예 : 매일 및 월간)에 가입 할 수 있다는 메시지를 게시하는 것에 대해 생각했습니다. 메시지는 지정된 간격 (매일/매월)으로 서비스가 활성화 될 때까지 지정된 대기열에 누적됩니다. 그런 다음 서비스는 대기열에서 메시지를 처리하고 보고서를 생성합니다. 이게 가야 할 길인가?

모든 포인터가 크게 감사하겠습니다.

업데이트

은 게시자 큐에 메시지를 유지할 수 (NServiceBus 포함)이되고 만 주어진 간격으로 게시? 아니면 게시자가 즉시 게시하고 구독자의 처리가 예약되도록 다른 방법을 사용해야합니까?

+2

메시지 기반 아키텍처를 사용하면 일일/월간 보고서가 아닌 "실시간"보고 기능을 사용할 수 있음을 비즈니스 이해 관계자와상의하십시오. 간혹보고를 수행하는 이유는 동기식 아키텍처로 구축 된 시스템의 성능을 저하시키기 때문입니다. –

+0

예약 된 이벤트가 정말로 필요한 경우 Quartz Scheduler를 사용하십시오. MassTransit에는 어댑터가 있습니다. 누군가 NServiceBus에 대해 동일한 작업을 수행했을 것입니다. – Travis

답변

0

NServiceBus는 장기 실행 프로세스의 경우 Sagas이라는 개념을 구현합니다. 좀 봐 http://nservicebus.com/Sagas.aspx타임 아웃 섹션은 찾고있는 것을 의미합니다.

+0

그래, 나는 무용담을 들여다 보았지만 아직 갈 길이 멀다고 아직 확신하지 못했다. – Morzy

+0

무용담을 사용하면 일정 시간이 경과 한 후에 수행해야하는 작업을 수행하기 위해 무용담을 소환하는 제한 시간을 설정할 수 있습니다. Quartz.net과 같은 외부 타이밍 라이브러리를 사용하여 주어진 시간이나 간격으로 메시지를 보낼 수도있다. 하지만 이미 NSB를 사용하고 있기 때문에 NSB의 기본 메커니즘을 선호합니다. –