我正在使用 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 的信息,但我什至没有发现有人报告过类似的问题。
——卡里