2

我在我们的服务器(Windows Server 2008)上使用 EasyNetQ 的请求/响应模式时遇到了问题。目前无法在本地复制它。

设置是我们有 2 个 Windows 服务(作为控制台应用程序运行以进行测试),它们通过 EasyNetQ 中的请求/响应模式连接。直到最近,这一直在服务器上按预期工作,其中请求方在请求超时之前不会“消耗”响应。

我已经包含了 2 个指向 pastebin 的链接,其中包含 EasyNetQ 的控制台日志记录,希望能让我的问题更加清晰。

请求端

响应端

除此之外,我的请求代码如下所示:

var request = new foobar(); 
var response = _bus.Request<foobar, foobar2>(request);

在响应方面:

var response = new response();
_bus.Respond<foobar, foobar2>(request =>
       {                    
            try
            {
                ....
                return response;
            }
            catch (Exception e)
            {
                ....
                return response;
            }
        });

正如我所说,请求方按预期发送请求,响应方消费/捕获它。这可以正常工作,但是当响应端完成处理并响应时(确实如此,消息可以在 RabbitMQ 管理中看到),直到请求超时后,请求才会消耗/捕获响应(默认超时为 10 秒,尝试设置为 60 秒,没有区别)。这在上面链接的日志中也很明显,正如您将在 RequestSide 上看到的那样,从先前超时的响应队列中收到了大约 5 条消息。

我已经尝试使用 RespondAsync 以防处理时间过长并且搞砸了一些事情,但没有帮助。尝试同时使用 RespondAsync 和 RequestAsync,只是把一切都搞砸了(我可能对请求做错了:))。

我可能会遗漏一些东西,但我不确定从这里尝试什么。

编辑:注意到我搞砸了。以及在下面添加更多上下文:

用于请求/响应的 IBus 是使用 Ninject 创建和注入的:

class FooModule : NinjectModule
    {
        public override void Load()
        { 
            Bind<IBus>().ToMethod(ctx => RabbitHutch.CreateBus("host=localhost", x => x.Register<IEasyNetQLogger>(_ => logger))).InSingletonScope();
        }
    }

这一切都通过使用 Topshelf 和 Ninject 构建的服务联系在一起,如下所示:

static void Main(string[] args)
        {
            HostFactory.Run(x =>
            {
                x.UseNinject(new FooModule());
                x.Service<FooService>(s =>
                {
                    s.ConstructUsingNinject();
                    s.WhenStarted((service, control) => service.Start(control));
                    s.WhenStopped((service, control) => service.Stop(control));
                });
                x.RunAsLocalSystem();
            });
        }

Topshelf 设置都经过了相当彻底的测试,它按预期工作,并且不应该与请求/响应问题真正相关,但我想我会提供更多的上下文。

4

1 回答 1

0

我遇到了同样的问题,我的问题是我只在响应中设置了超时,而不是在请求端,在我在两边都设置了 timeoute 之后,它可以正常工作,例如我的连接。主机=主机名;超时=120;虚拟主机=我的主机;用户名=我的用户名;密码=我的密码

于 2015-07-05T08:20:08.817 回答