1

我正在使用 EasyNetQ/RabbitMQ 将在 IIS 中运行的 Web 应用程序连接到 Windows 服务。但是,我似乎没有让请求/响应起作用。我很确定这不是代码问题,但我已经想不出下一步该去哪里了。

这是一个完美运行的测试控制台应用程序:

    static void Main()
    {
        var stopHandle = new ManualResetEventSlim();
        var producer = new Thread(() =>
        {
            string cs = "host=localhost;virtualHost=/;username=demo;password=y4xHEyq3nQOd;timeout=120;persistentMessages=false;prefetchcount=1";
            var bus = RabbitHutch.CreateBus(cs, x => x.Register<IEasyNetQLogger>(s => new EasyNetQ.Loggers.ConsoleLogger()));

            while (!stopHandle.IsSet)
            {
                try
                {
                    var result = bus.Request<AutomationRequest, AutomationResponse>(new AutomationRequest
                    {
                        taskId = "140061381555",
                        arguments = "type=pdf",
                        issueId = 97630548355,
                    });
                    Console.WriteLine("Result: " + result.status + ", " + result.status + ", " + result.downloadUrl);
                }
                catch (Exception)
                {
                    Console.WriteLine("Failed");
                }
                if (!stopHandle.IsSet) Thread.Sleep(1000);
            }

            bus.Dispose();
        });

        producer.Start();

        Console.ReadLine();

        stopHandle.Set();
        producer.Join();
    }
}

另一方面,这是相同的测试代码,但作为 Web 应用程序:

namespace WebApplication2
{
    public partial class _Default : Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            string cs = "host=localhost;virtualHost=/;username=demo;password=y4xHEyq3nQOd;timeout=120;persistentMessages=false;prefetchcount=1";
            IBus bus = RabbitHutch.CreateBus(cs, x => x.Register<IEasyNetQLogger>(s => new EasyNetQ.Loggers.ConsoleLogger()));

            try
            {
                var result = bus.Request<AutomationRequest, AutomationResponse>(new AutomationRequest
                {
                    taskId = "140061381555",
                    arguments = "type=pdf",
                    issueId = 97630548355,
                });
                Console.WriteLine("Result: " + result.status + ", " + result.status + ", " + result.downloadUrl);
            }
            catch (Exception)
            {
                Console.WriteLine("Failed");
            }
            bus.Dispose();
        }
    }
}

Web 应用程序可以很好地发送消息,排队并在后端进行处理。后端为响应提供正确的correlationID 并将其排队。但是,出于某种我不知道的原因,Web 应用程序从未得到响应。

Web 应用程序最终会超时。但是,超时的长度不是问题,因为将响应放入队列只需要大约两秒钟,并且在双方将超时更改为两分钟并没有任何区别。

有人有现成的解决方案要解决什么吗?或者任何想法在哪里看?我已经用谷歌搜索了所有关于 EasyNetQ 或 RabbitMQ 的信息,但我什至没有发现有人报告过类似的问题。

——卡里

4

0 回答 0