1

IIS で実行されている Web アプリケーションを Windows サービスに接続するために、EasyNetQ/RabbitMQ を使用しています。ただし、リクエスト/レスポンスが機能していないようです。コードの問題ではないことは確かですが、次にどこを見るべきかについてのアイデアが不足しています。

これは完璧に動作するテスト コンソール アプリケーションです。

    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 アプリケーションは、最終的にタイムアウトを取得します。ただし、タイムアウトの長さは問題ではありません。応答をキューに入れるのに約 2 秒しかかからず、タイムアウトを両側で 2 分に変更しても違いはありません。

誰かが何を修正するための準備ができている解決策を持っていますか? または、どこを見ればいいですか?EasyNetQ または RabbitMQ について理解できることはすべてグーグル検索しましたが、同様の問題について報告した人を見つけることさえできませんでした。

--karri

4

0 に答える 0