2011-11-23 1 views
1

받은 편지함의 모든 이메일을 읽고 구문 분석 한 다음 데이터베이스에 삽입하는 메일 읽기 서비스가 있습니다. 내가 겪고있는 문제는 이메일을받은 순서대로 파싱 할 것이라는 보장이 없다는 것입니다 (비즈니스 요구 사항 임). 내 수정이 대기열 시스템의 일종을 소개하는 것입니다. 이 방법을 사용하면 항목이 들어오는 순서대로 처리하게됩니다. 이렇게하면 전자 메일 읽기와 데이터베이스에서 구문 분석/삽입의 이점을 얻을 수 있습니다.모든 메시지가 로컬로 전송되는 경우 서비스 버스를 사용하는 것이 과도한가?

내 질문은 로컬 메시지 만 보내려는 계획이라면 서비스 버스 (예 : NServiceBus)를 사용하는 것입니다. 즉, 전자 메일을 읽는 서비스와 데이터베이스의 전자 메일을 구문 분석/삽입하는 서비스가 동일한 컴퓨터에 상주한다는 의미입니다.

감사합니다.

+0

큐에 추가 할 순서를 알고있는 경우 왜 순서대로 항목을 처리 할 논리를 변경할 수 없습니까? –

+0

그래서 전자 메일을 읽고 대기열에 넣는 서비스와 대기열을 읽는 다른 서비스를 하나의 서비스로 생각하고 데이터베이스에 정보를 넣으려고합니까? 현재 진행중인 프로세스가 전자 메일을 순서대로 처리하지 못한다면 대기열로 출력하는 것이 어떻게 도움이되는지 확신 할 수 없습니다. – Daryl

+0

@Ben - 좋은 지적입니다. 내 제어 문제로 인해 일부 구성 요소가 중단 될 수 있습니다. 대기열을 처리하는 동안 문제가 발생했습니다. 이것은 시스템의 모든 오류로 인해 전자 메일이 손실되지 않도록하기위한 방법입니다. – gcso

답변

3

네, 분명히 과도 함입니다. NServiceBus는 메시지가으로 전달되는 것을 보장하지 않기 때문에 특히 그렇습니다.

순서대로 메시지를 가져 오는 방법을 알고 있다고 가정하면 Queue<T>을 사용할 수 있습니다 (문제가있는 곳이나 대기열을 사용하지 않고있는 것처럼 보입니다. 큐를 올바른 순서로 시작하여 항목을 가져 오는 방법을 알아야 함).

KISS 및 YAGNI는 하루 종일 매일 적용됩니다.

+0

1000x 예. 너무 드물게 여기서 명확한 예와 대답 없음을 볼 수 있습니다. 이는 곧바로 대답 할 수있는 확실한 사례입니다. – Stimul8d

1

단어가됩니다. 필자의 생각에 따르면, 응용 프로그램의 허용 가능한 성능 한계에 영향을 미치지 않고 가능한 한 유연하게 시스템을 구성하십시오.

일반적으로 : 생각할 수있는 최악의 마케팅 결정을 준비하십시오.

1

다릅니다. 애플리케이션의 경우 Jason과 동의합니다. 서비스 버스는 로컬 데이터 구조 이상으로 메시지를 처리하는 데 도움이되지 않습니다. Jason이 말했듯이 서비스 버스에서 메시지의 순서가 보장되지 않는다는 점을 감안하면 이 더 많습니다.은 어려울 것입니다.

그러나 서비스 버스를 사용하여 메시지를 로컬로 보내는 것이 매우 유용 할 수 있습니다. 따라서 다른 프로세스에 비동기 적으로 메시지를 보내는 것이 매우 쉽습니다. 메시지의 소비자가 다른 프로세스에 있기 때문에 스레드 관련 사항이 없습니다. 메시지는 내구성이 있으므로 누락 된 항목에 대해 걱정할 필요가 없으며 새 구독자를 추가하기 만하면 메시지에 대한 추가 처리를 추가하는 것이 매우 쉽습니다. 추가 보너스로 시스템이 너무 커져 한 컴퓨터에서 편안하게 실행할 수없는 경우 버스를 배포하는 것이 쉽지 않습니다.

솔루션의 경우 불필요하며 문제가 발생할 수 있습니다. 그러나 로컬에서 서비스 버스를 사용하는 것이 타당한 경우가 있습니다.

2

귀하의 지속성 문제에 대한 MSMQ를 말씀 드리겠습니다. 설치가 완료되면 컴퓨터의 전원이 꺼지거나 다른 응용 프로그램이 다운되는 것과 관계없이 거기에있을 수 있습니다.

1

이것은 ZeroMQ가 잘 작동하는 직업의 일종이며, 다른 언어 및 다른 플랫폼에서도 사용할 수있는 도구를 사용하는 방법을 배우는 것이 장점입니다.