2013-06-13 5 views
3

NServiceBus 문제, Windsor 문제 또는 내 자신의 어리 석음 문제인지 여부는 확실하지 않지만 일시적인 많은 구성 요소를 가리키는 것처럼 보이는 메모리 누수가 발생합니다. 여전히 주위에 매달려있다. 컨테이너가 일시적인 구성 요소를 처리하지 않음

내가 내 IWantCustomInitialization.Init 방법 안에, 윈저와 NServiceBus를 설정하는 방법입니다 : 내가 찾는 것은

var cont = new Castle.Windsor.WindsorContainer(); 
cont.Register(
    Component.For<IWindsorContainer>().Instance(cont));  

Configure.With() 
    .CastleWindsorBuilder(cont) 
    .DefiningCommandsAs(t => t.GetCustomAttributes(typeof(MyCommandAttribute), false).GetLength(0) > 0) 
    .DefiningEventsAs(t => t.GetCustomAttributes(typeof(MyEventAttribute), false).GetLength(0) > 0) 
    .DefiningMessagesAs(t => t.Namespace != null && t.Namespace.EndsWith(".LocalMessages")) 
    .XmlSerializer() 
    .Log4Net() 
    .IsolationLevel(System.Transactions.IsolationLevel.ReadCommitted) 
    .UseNHibernateTimeoutPersister() 
    .RunTimeoutManager() 
    .Sagas() 
    .NHibernateSagaPersister() 
    .DisableRavenInstall(); 

cont.Register(
    Component.For<ISessionFactory>().Named("ABC").LifeStyle.Singleton.UsingFactoryMethod(() => 
{ 
    return Fluently.Configure().Database(() => 
     { 
      return MsSqlConfiguration.MsSql2005.UseOuterJoin() 
      .ConnectionString(x => x.FromConnectionStringWithKey("ABCData")) 
      .ShowSql(); 
     } 
    ).Mappings((m) => 
     { 
      AddABCMappingsOnly(m.FluentMappings); 
     }) 
    .ExposeConfiguration(cfg => 
     { 
      SchemaMetadataUpdater.QuoteTableAndColumns(cfg); 
      var sv = new SchemaValidator(cfg); 
      sv.Validate(); 
     }) 
    .BuildSessionFactory(); 
})); 

cont.Register(
    Component.For(typeof(IClientLookup), typeof(ICountryLookup), typeof(IOtherLookupLookup)).LifeStyle.Transient.ImplementedBy<ABCDataLookup>().DependsOn(
Dependency.OnComponent(typeof(ISessionFactory), "ABC"))); 

, 그 가동 시간의 일정 시간 (예를 들어, 가능한 한 메시지를 통해 밀어 2 시간) , 수천 개의 ABCDataLookup 구성 요소가 숨어 있으며 지금까지 볼 수있는 한 이러한 구성 요소를 보유하고있는 유일한 장치는 Windsor 컨테이너입니다 ().)

내 문제 중 일부는 t에서 발생할 수 있습니다. NServiceBus가 컨테이너의 일부 구성 요소를 등록하거나 해상도를 수행 할 책임이 있으므로 실제로 등록이 올바른지 확인할 수 없습니다.

내 등록에 잘못했거나 바보 같은 짓이 있습니까?

이미 잘못 보이는 하나의 일을하는 데 :

cont.Register(
    Component.For<IWindsorContainer>().Instance(cont)); 

NServiceBus가 IFindSagas 구현으로 사용하기 위해 컨테이너에 하나 ISessionFactory를 등록하기 때문이다. 하지만 IWantToRunWhenTheBusStarts을 구현하는 다른 구성 요소는 "ABC"ISessionFactory을 얻고 NServiceBus와 Windsor간에 작업을 수행하는 방법을 찾지 못했습니다.

ABCDataLookup 인스턴스가 삽입 될 것으로 예상되는 다른 구성 요소는 Sagas이며 NServiceBus가 등록/인스턴스화하는 방법을 실제로 볼 수 없습니다.

추가 코드 또는 구성이 표시되어야하는 경우 소리 치십시오.

내 Packages.config : 우리는 제대로 V4의 구성 요소 폐기와는 꽤 몇 가지 문제를 해결 한

<packages> 
    <package id="Castle.Core" version="3.0.0.4001" targetFramework="net45" /> 
    <package id="Castle.Windsor" version="3.0.0.4001" targetFramework="net45" /> 
<!-- irrelevant --> 
    <package id="FluentNHibernate" version="1.3.0.733" targetFramework="net45" /> 
    <package id="Iesi.Collections" version="3.2.0.4000" targetFramework="net45" /> 
    <package id="log4net" version="1.2.10" targetFramework="net45" /> 
<!-- irrelevant --> 
    <package id="NHibernate" version="3.3.2.4000" targetFramework="net45" /> 
    <package id="NServiceBus" version="3.3.8" targetFramework="net45" /> 
    <package id="NServiceBus.CastleWindsor" version="3.3.8" targetFramework="net45" /> 
    <package id="NServiceBus.Host" version="3.3.8" targetFramework="net45" /> 
    <package id="NServiceBus.Interfaces" version="3.3.8" targetFramework="net45" /> 
    <package id="NServiceBus.NHibernate" version="3.3.8" targetFramework="net45" /> 
</packages> 
+0

당신은 이것을 읽었습니까 : http://devlicio.us/blogs/krzysztof_kozmic/archive/2010/08/27/must-i-release-everything-when-using-windsor.aspx – Marwijn

+0

@ Marwijn - 나는 그것을 읽었지만 어떤 통찰력도 제공하지 않았다. 나는 두렵다. –

+0

ABCDataLookup 인스턴스에 대한 Sagas 인스턴스 수를 확인할 수 있습니까? 일치하는 경우 Sagas는 windsor 컨테이너가 아닌 참조를 유지해야한다고 비난했습니다. –

답변

1

, 또한 ISessionFactory가 UOW로 구현되어야한다 https://github.com/NServiceBus/NServiceBus/commit/baa9624517d1083e3cfa681e8598f66ccfbf741b

를 참조 참조 영감을위한 우리의 내부 구현 here

+0

버그에 대해 알려 주실 수 있습니까?) 그 문제를 일으키는 원인이 되는가? –

+0

v4에서 구성 요소를 올바르게 처리하는 것과 관련된 몇 가지 사항을 수정했습니다. https://github.com/NServiceBus/NServiceBus/commit/baa9624517d1083e3cfa681e8598f66ccfbf741b를 참조하십시오. –

관련 문제