>
<올>
  • 마이크로 서비스 아키텍처에 대한 일반적인 조언은 마이크로 서비스간에 메시지 클래스를 공유하지 않는 것입니다. MassTransit은 메시지를 보내거나받을 때 .NET 유형 정보에 크게 의존하므로 두 개의 다른 마이크로 서비스에서 두 개의 유사한 유형을 선언하면 작동하지 않습니다.
  • 일부 추가 구성으로이 작업을 수행 할 수 있습니까?

    1. MassTransit의 일반적인 패턴은 POCO 대신 메시지 인터페이스를 선언 한 다음 익명 객체를 Publish 에 전달하는 것입니다.  / Send  행동 양식. 이 경우 메시지 인터페이스에서 무언가를 변경하면 (예 : 속성 이름 변경) 컴파일 타임 오류가 발생하지 않습니다.

    왜 이것이 권장됩니까? 익명 개체의 취약성을 처리하는 방법?

    감사합니다!

    • 답변 # 1

      메시지 인터페이스를 선호하는 제안은 "유형이 아닌 공유 스키마"원칙을 기반으로합니다. 인터페이스는 계약이며 계약은 공유해도됩니다. "메시지 _classes 공유 금지"에 대해 언급했습니다. 클래스에는 동작이 있고 많은 프로젝트가 동작을 포함하는 메시지 클래스로 인해 어려움을 겪기 때문에 역 직렬화를 방지하고 실제로 메시지에 대한 도메인 별 관심을 불러 일으킬 수 있습니다.

      문서에는 다음과 같이 명확하게 명시되어 있습니다 :

      와이즈 비즈 이 제안은 강력하지만 요구 사항으로 볼 수는 없다. 조직의 모든 개발자가 속성 백인 메시지의 개념을 명확하게 이해하고 기본 유형의 속성과 기본 유형의 속성 백인 복합 유형 만 포함하는 경우 인터페이스 대신 클래스로 작업하도록 선택할 수 있습니다.

      익명 유형 사용에 대한 권장 사항이나 제안이 없습니다. 가능성은 있지만 그 이상은 아닙니다. 메시지 제작자 쪽에서 메시지 인터페이스를 구현하는 클래스를 완벽하게 사용할 수 있으며 인터페이스에 존재하지 않는 속성을 임의로 할당 할 수 없습니다.

      귀하의 소비자와 만 인터페이스를 공유하고 인터페이스는 읽기 전용이므로 일부 세터에는 한 개발자가 메시지 유형에 유용하다고 생각한 이상한 코드가 있기 때문에 직렬화 해제 오류가 발생하는 데 문제가 없습니다.

      실제로는 인터페이스를 사용했지만 익명 객체는 사용하지 않았습니다. 개발자는 메시징의 작동 방식에 대한 충분한 경험과 이해를 얻었으므로 POCO를 메시지로 널리 사용합니다.

      공유에 관한 마지막 것은 nuget 패키지를 사용하여 메시지 계약을 공유하는 관행에서 멀어 졌다는 것입니다. 매력적이고 안전 해 보이지만 일상 업무에 방해가됩니다. 메시지 패키지 (또는 인터페이스)를 복사하거나 소스 패키지를 사용하는 것이 좋습니다. 팀이 버전 관리 및 취약한 스키마와 같은 모범 사례를 따르면 문제가 발생하지 않습니다. 주의해야 할 것은 네임 스페이스를 그대로 유지하는 것입니다.

      It is strongly suggested to use interfaces for message contracts, based on experience over several years with varying levels of developer experience.

  • 이전 r - 플로팅하는 동안 Y 축에서 변수 변환
  • 다음 c++ - 복합 데이터 유형에 glClearBufferData를 사용하여 이식 가능합니까?