MassTransit リクエスト/レスポンス シナリオを設定しようとしています。問題は、メッセージが消費者に届かないことです。PublishRequest で「応答待ちタイムアウト」エラーが発生します。ログ ファイルに他のエラーは表示されません。msmq でメッセージが作成されています。
例外情報:
例外の種類: TargetInvocationException 例外メッセージ: 呼び出しのターゲットによって例外がスローされました。System.RuntimeTypeHandle.CreateInstance (RuntimeType タイプ、ブール型 publicOnly、ブール型 noCheck、ブール型 & canBeCached、RuntimeMethodHandleInternal & ctor、ブール型 & bNeedSecurityCheck) で System.RuntimeType.CreateInstanceSlow (ブール型 publicOnly、ブール型 skipCheckThis、ブール型 fillCache、StackCrawlMark & stackMark) で System.RuntimeType.CreateInstanceDefaultCtor (Boolean publicOnly、Boolean skipCheckThis、Boolean fillCache、StackCrawlMark& stackMark)
System.Activator.CreateInstance(Type 型、Boolean nonPublic) で System.Activator.CreateInstance(Type 型) で System.Web.Mvc.DefaultControllerFactory.DefaultControllerActivator.Create(RequestContext requestContext、型 controllerType) で応答待ちのタイムアウト、RequestId: MassTransit.RequestResponse.RequestImpl 1 configureCallback での 08cfa243-4a88-ba3a-20cf-307f54910000
1.Wait() in d:\BuildAgent-03\work\8d1373c869590c5b\src\MassTransit\RequestResponse\RequestImpl.cs:line 124 at MassTransit.RequestResponseExtensions.PublishRequest[TRequest](IServiceBus bus, TRequest message, Action
(d:\BuildAgent-03\work\8d1373c869590c5b\src\MassTransit\RequestResponseExtensions.cs: プロデューサーの 31 行目)。 c:\Users\rick\Documents\Visual Studio 2012\Projects\ConsumerTest1\Producer.Website\Controllers\AccountController.cs:line 56 の Website.Controllers.AccountController..ctor()
プロデューサーのセットアップ:
_bus = ServiceBusFactory.New(sbc =>
{
sbc.UseMsmq();
sbc.VerifyMsmqConfiguration();
sbc.UseMulticastSubscriptionClient();
sbc.SetNetwork("Test");
sbc.ReceiveFrom("msmq://localhost/consumer_test_1");
});
プロデューサー送信メッセージ:
var message = new AccountNewMessage()
{
CorrelationId = CombGuid.Generate(),
UserName = “blah blah”,
Password = “yada yada”
};
this._bus.PublishRequest(message, r =>
{
r.SetTimeout(30.Seconds());
r.Handle<AccountNewMessageResponse>(m =>
{
var response = m;
});
});
消費者設定:
this.bus = ServiceBusFactory.New(sbc =>
{
sbc.UseMsmq();
sbc.VerifyMsmqConfiguration();
sbc.UseMulticastSubscriptionClient();
sbc.SetNetwork("Test");
sbc.ReceiveFrom("msmq://localhost/consumer_test_2");
sbc.Subscribe(subs => subs.Instance(new AccountNewMessageConsumer()));
});
消費者:
public class AccountNewMessageConsumer : Consumes<AccountNewMessage>.Context
{
public void Consume(IConsumeContext<AccountNewMessage> context)
{
context.Respond(new AccountNewMessageResponse()
{
CorrelationId = context.Message.CorrelationId,
ErrorCode = "1",
UserId = new Random().Next(1, 10000).ToString()
});
}
}
メッセージ:
[Serializable]
public class AccountNewMessage : CorrelatedBy<Guid>
{
public Guid CorrelationId { get; set; }
public string UserName { get; set; }
public string Password { get; set; }
}
[Serializable]
public class AccountNewMessageResponse : CorrelatedBy<Guid>
{
public Guid CorrelationId { get; set; }
public string UserId { get; set; }
public string ErrorCode { get; set; }
}
私は何を間違っていますか?ありがとうございました。