1

ServiceStack Re-usability ユース ケース プロジェクトのソリューションを使用しています。

このソリューションに、以下のコードを含む新しいコンソール アプリを追加しました。

元の再利用性ユースケース プロジェクトでは、EmailMessage が公開されると、電子メールを送信したサブスクライバーによって処理されました (つまり、SMessageService.Any(EmailMessage request))。

コンソール アプリを実行すると、つまり、EmailMessage にサブスクライブしている 2 つのアプリケーションがあることを意味しますが、新しいコンソール アプリだけがメッセージを受信します。

私は次のものを持っています:

私のコンソールアプリは次のとおりです。

class Program
{
    static void Main(string[] args)
    {
        var subscriberHost = new SubscriberHost();
        subscriberHost.Init();

        Console.WriteLine("Waiting of publishing 
                to happen on EmailMessage as we are subscribing to it...");
        Console.ReadLine();
    }
}

public class SubscriberHost : AppHostHttpListenerBase
{
    private RedisMqServer mqHost;

    public SubscriberHost() 
      :base("Subscriber console",typeof(EmailMessageEventHandler).Assembly)
    {

    }


    public override void Configure(Container container)
    {
        var redisFactory = new PooledRedisClientManager("localhost:6379");
        mqHost = new RedisMqServer(redisFactory, retryCount:2);

        mqHost.RegisterHandler<EmailMessage>((message) =>
                           {
                                 var emailMessage = message.GetBody();
                                 Console.WriteLine(emailMessage.To);
                                 Console.WriteLine(emailMessage.Subject);
                                 Console.WriteLine(emailMessage.Body);
                                 return new SMessageReceipt {
                                           Type = "not used",
                                           To = "test",
                                           From = "Reusability",
                                           RefId = "1,"
                                   };
                                                                      });
   // mqHost.RegisterHandler<EmailMessage>(ServiceController.ExecuteMessage);
   mqHost.Start();
    }
}

両方のサブスクライバーが EmailMessage を受信することを期待していましたが、新しいコンソール アプリだけが受信しています。他のサブスクライバーがメッセージを受信しないのはなぜですか?

パブリッシュを行うクライアント コードは変更されていません。

4

1 に答える 1

1

上で示したのは Redis MQ の使用です。複数のサブスクライバーの問題をテストしていたので、Redis Pub/Sub が必要です。

MQ の場合、サブスクライバーはメッセージをキューから取り出して処理します。加工したら終わりです。

Pub/Sub の場合、多くのサブスクライバーが存在する可能性があり、それぞれがメッセージのコピーを受け取ります。

これが他の人に役立つことを願っています。

于 2012-12-13T19:17:11.477 に答える