2012-01-19 6 views
0

ASP.NET MVC3에서 NServiceBus를 테스트하고 있습니다. 지금은 백엔드에 명령 메시지를 보낼 수 있으며 메시지 처리기는 메시지를 듣고 있습니다. 그러나 동일한 메시지를 게시하려고하면 메시지 처리기가 수신 대기하지 않습니다.구독자가 게시자의 메시지를 처리 ​​할 수 ​​없습니다.

내가 발견 한 문제는 메시지가 가입자의 대기열에 게시되지 않는다는 것입니다. 내가 디버깅 및 NServiceBusHost 콘솔을 검사 할 때, 내가 몇 일 동안 또 다시 내 구성 설정을 확인하고 나를 위해 올바른 것

2012-01-19 22:53:35,042 [1] INFO NServiceBus.Unicast.UnicastBus [(null)] <(null 
)> - Subscribing to SampleMessage.Person1WasCreated, SampleMessage, Version=1.0. 
0.0, Culture=neutral, PublicKeyToken=null at publisher queue Test-web 

말한다. 누구나 내가 뭘 놓치고 있는지 확인해 줄 수 있니? 내가하려는 일은 웹에서 메시지를 게시하고 메시지가 백엔드 (ServiceHost2)에서 처리되어야합니다.

namespace ServiceHost2 
{ 
    public class EndpointConfig : IConfigureThisEndpoint, AsA_Server, IWantCustomInitialization 
    { 
     public void Init() 
     { 
      Configure.With() 
       .Log4Net() 
       .CastleWindsorBuilder() 
       .MsmqTransport() 
       .MsmqSubscriptionStorage() 
       .XmlSerializer() 
       .UnicastBus().LoadMessageHandlers() 
       ; 
     } 
    } 
} 
ServiceHost2

에 대한

ASP.NET MVC3의 Web.config

<configSections> 
    <section name="MsmqTransportConfig" type="NServiceBus.Config.MsmqTransportConfig, NServiceBus.Core" /> 
    <section name="MsmqSubscriptionStorageConfig" type="NServiceBus.Config.MsmqSubscriptionStorageConfig, NServiceBus.Core" /> 
    <section name="UnicastBusConfig" type="NServiceBus.Config.UnicastBusConfig, NServiceBus.Core"/> 
    </configSections> 
    <MsmqTransportConfig InputQueue="Test-web" ErrorQueue="Test-web-error" NumberOfWorkerThreads="1" MaxRetries="5" /> 
    <MsmqSubscriptionStorageConfig Queue="Test-subscriptionstorage" /> 

Global.asax.cs

protected void Application_Start() 
     { 
      AreaRegistration.RegisterAllAreas(); 

      RegisterGlobalFilters(GlobalFilters.Filters); 
      RegisterRoutes(RouteTable.Routes); 

      Global.Bus = Configure.WithWeb() 
       .Log4Net() 
       .CastleWindsorBuilder() 
       .XmlSerializer() 
       .MsmqTransport().IsTransactional(false) 
       .UnicastBus() 
       .LoadMessageHandlers() 
       .MsmqSubscriptionStorage() 
       .CreateBus() 
       .Start() 
       ; 
     } 

의 app.config ServiceHost2에서 프로젝트

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <configSections> 
    <section name="UnicastBusConfig" type="NServiceBus.Config.UnicastBusConfig, NServiceBus.Core" /> 
    <section name="MsmqTransportConfig" type="NServiceBus.Config.MsmqTransportConfig, NServiceBus.Core" /> 
    <section name="MsmqSubscriptionStorageConfig" type="NServiceBus.Config.MsmqSubscriptionStorageConfig, NServiceBus.Core" /> 
    </configSections> 
    <MsmqSubscriptionStorageConfig Queue="Service2-AC1-subscriptionstorage" /> 
    <MsmqTransportConfig InputQueue="Service2-AC1" ErrorQueue="Service2-AC1-Error" NumberOfWorkerThreads="1" MaxRetries="5" /> 
    <UnicastBusConfig> 
    <MessageEndpointMappings> 
    <add Messages="SampleMessage" Endpoint="Test-web" /> 
    </MessageEndpointMappings> 
    </UnicastBusConfig> 
    <appSettings> 
    <add key="EndpointConfigurationType" value="ServiceHost2.EndpointConfig, ServiceHost2"/> 
    </appSettings> 
</configuration> 

EndpointConfig메시지를

public ActionResult CreatePerson(Person p) 
     { 
      var Person1WasCreated = new Person1WasCreated {Id = p.Id,Name = p.Name}; 
      Global.Bus.Publish(Person1WasCreated); 
      return View(); 
     } 

덕분에 게시 컨트롤러 16,

방법.

+0

분명히 잘못된 것을 볼 수 없으며 로그 출력이 실제로 이벤트에 가입하고있는 것처럼 보입니다 ... 게시하지 않았습니까? 구독 대기열에 구독이 있는지 확인하십시오. – JimmyP

+0

다시 두 번 확인했는데 거기에 없습니다. 내가 메시지를 구독했지만 가입 저장 장치 "Service2-AC1-subscriptionstorage"에 값이 없다고 말합니다. 아주 이상한. FYI, NServiceBus 2.6을 사용하는 메신저 – kekewong

+0

구독자는 게시자 측 (웹 사이트)에 저장됩니다. Test-subscrptionstorage queue를 확인하십시오. –

답변

0

내가 왜 그런지 알았습니다. 오늘이 기사를 읽고있었습니다. Why not publish NServiceBus messages from a web application?

메시지는 웹에서 게시하지 않는 것이 분명합니다. 어떻게 든 내 웹 프로젝트에서 만든 구독 저장소는 구독 할 수있는 항목이 없습니다.

내 솔루션은 웹에서 Service1의 메시지 처리기로 명령 메시지를 보내고 Service2에 새 이벤트 메시지를 게시하는 것입니다. 이벤트 메시지조차도 Service1의 구독 저장소에 가입 할 수 있습니다. 이제 모든 것이 잘 작동합니다. 감사.

관련 문제