2011-04-23 9 views
0

지금은 단일 프로세스 공간에있는 시스템에서 작업하고 있습니다. 우리는 이것을 여러 개의 프로세스로 분할하고, 처음에는 같은 상자에서 실행하지만 궁극적으로는 여러 개의 개별 시스템에 분배합니다. ESB (NServiceBus, Rhino ESB)를 사용하거나 WCF + 대기열을 사용하여 내 애플리케이션을 롤링하는 방식으로 기울어 져있어 우리 애플리케이션에있는 pub/sub 및 요청/응답 시나리오를 처리 할 수 ​​있습니다.서비스 버스/분산 메시징의 존재를 추상화 하시겠습니까?

그러나 추상화에 어려움을 겪고 있습니다. 다양한 구성 요소가 버스를 통해 말하고 있다는 것을 알 필요가 없습니다. 다양한 서비스를 연결하는 현재 API는 이러한 종류의 모델로 잘 변환되지만 클라이언트 및 서버 측에서이를 숨기고 싶습니다. 클라이언트와 서버를위한 커스텀 프록시 코드를 많이 작성하지 않았다면, 이것에 접근하는 더 좋은 방법이 있을까요? WCF가 서비스 정의를 기반으로 프록시를 자동 생성 할 수 있다는 것을 알았지 만 Rhino 서비스 버스에서 얻은 다른 것들을 정말 좋아합니다.

이상적으로는 IoC를 사용하는 다른 구현 (ESB/메시징 계층 포함/제외)을 교환 할 수 있어야합니다. (인터페이스를 통해 전달 될 수있는 규칙에 따라 제한이 적용되어야한다는 것을 알고 있어야합니다.),하지만 나는 어디로 가야할지 모르겠다. 난 정말 현재 인터페이스에있는 모든 메서드 호출을 자체 이산 메시지 클래스로 변경하지 않아도됩니다.

내가 도와 줄 수있는 모든 리소스/패턴/도구가 있습니까? 명확하지 않은 경우 질문하십시오. 감사.

답변

1

도움이 될만한 솔루션/기성품 구성 요소가 없을 수 있습니다.

문제 1 : 그것은 위치 투명성 및 서비스 집합을 제공하기 때문에
근본적인 문제는, ESB를 통해 해결 될 수있다. 일반 ESB 은 서비스 소비자와 서비스 제공자간에 요청을 중개/중개합니다.
간단한 예를 들어 보자

  1. A와 가능성 (외부 종속성Service_BService_D에 의해 노출 계약을 정의 :이 시나리오에서는

    Service_A  depends on  Service_B 
    Service_C  depends on  Service_B 
    Service_B  depends on  Service_D

    을 진행하는 가장 좋은 방법은 이것이다 웹 서비스, ESB는 복수 프로토콜을 지원하지만) Service_A, Service_CService_B에 있으며 ESB를 통해 소비합니다.

  2. ESB에서 시작하려면 같은 서비스에 Service_BService_D의 서비스를 라우팅하십시오.
  3. 다른 위치에서 Service_DService_BService_DxService_Bx으로 마이그레이션하면 ESB를 새 위치로 라우팅하도록 재구성 할 수 있습니다.
    IOC의 과제 : 또, ESB는 (. Service_Bx에 예 Service_B 테스트 데이터 및 생산 데이터) 일부 파라미터 세트

문제 2에 기초 Service_B 또는 Service_Bx로 라우팅하도록 구성 될 수있다 아마도 달성하기 어려울 수 있습니다. 필요가 없을지도 모른다.
클라이언트는 알려진 위치에서 소비하는 대신 서비스 위치의 위치를 ​​입력 받았다고 가정합니다. 이것은 실제로 클라이언트 측에 구성을 전송합니다. 이렇게하면 시스템에 새로 추가 된 클라이언트마다 별도의 구성 제어가 필요합니다. 이것은 물류 문제로 이어질 수 있습니다.

귀하의 접근 방법을 알고 싶다면 최종 해결책을 게시하십시오.

+0

내 프로젝트의이 부분은 표를 얻었으며 여전히 그렇게합니다./우리가 그것을 선택하면, 나는 후속 조치를 취할 것입니다. – Joe

+0

@Joe, 불행히도, 매일 점점 더 많은 대형 SOA-tools/ESB 기반 엔터프라이즈 프로젝트가 발표됩니다. 좋지 않은 표시 : IT 부서의 자금 부족을 나타냅니다 ... – CMR