2010-12-29 5 views
0

MSMQ를 통해 MassTransit으로 메시지를 보내려고합니다. 이 메시지는 Hibernate 질의로부터 획득되고 Castle Proxies (lazy loading을위한)를 포함하는 두 가지 속성을 포함한다.MSMQ를 통해 MassTransit을 사용하여 NHibernate에서 Castle 프록시를 보내면 StackOverflowException이 발생합니다.

메시지의 일부로 프록시 (bus.Endpoint.Send(msg) 사용)를 보내면 StackOverflowException이 생성됩니다. 이 두 속성을 할당하지 않고 null로두면 메시지가 문제없이 대기열을 통해 전달됩니다.

MSMQ/MassTransit 설정에 문제가 있습니까?

그렇지 않은 경우 AutoMapper와 같은 것을 사용해야 이러한 프록시를 제거 할 수 있습니까?

+0

이러한 지연로드 속성에 액세스하려고하면이 StackOverflowException이 발생합니까? 아니면 그냥 버스를 통해 메시지를 보내시겠습니까? –

+0

메시지를 보내면됩니다. 생산자 측에서 MSMQ를 치기 전에 발생합니다. –

+0

이것을 재현 할 독립형 테스트 케이스를 만들 수 있습니까? 어쨌든 –

답변

3

이것은 생성 된 동적 프록시 및 사용되는 직렬기를 기반으로 한 예외 일 가능성이 있습니다. 기본 XML serializer라고 가정합니다. 나는 MT를위한 github 페이지에 문제를 게시하여 다음을 볼 수 있습니다. https://github.com/MassTransit/MassTransit

이러한 메시지는 프로세스 간의 연결을 끊는 계약을 고려해야합니다. Hibernate 엔티티를 사용하면, DB 변경이 다른 소비자들에게 영향을 미칠 수 있기 때문에 이러한 서비스들은 단순한 메시지 이상으로 결합된다. 이상적으로는 이것을 전달하기 전에 항상 이것을 다른 객체에 매핑하는 것이 좋습니다.

버스 엔드 포인트로 직접 보내는 대신 bus.Publish(msg)이 아닌 이유가 있습니까? 당신은 MT 메일 링리스트에 가입하여 더 자세하게 토론 할 수 있습니다 : http://groups.google.com/group/masstransit-discuss

나는 이것이 도움이되기를 바랍니다!

+0

도움 주셔서 감사합니다 :) –

관련 문제