4

MassTransit のコードは次のとおりです。

サブスクライバー コンソール アプリ:

namespace ConsoleSubscriber
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("set up a subscriber");

            Bus.Initialize(config =>
            {
                config.UseMsmq();
                config.VerifyMsmqConfiguration();
                config.UseMulticastSubscriptionClient();
                config.UseControlBus();
                config.ReceiveFrom("msmq://localhost/test_end");
                config.Subscribe(s => s.Instance(new Consumer()).Permanent());                    
            });

            Console.Read();
        }         
    }

    public class Consumer : Consumes<Message>.All
    {
        public void Consume(Message message)
        {
            Console.WriteLine("start consuming message");

            if (string.IsNullOrEmpty(message.Ids))
            {
                Console.WriteLine("no ids");     
            }
            else
            {
                Console.WriteLine("ids are " + message.Ids);
            }
        }
    }
}

メッセージ クラス:

[Serializable]
public class Message
{
    public string Ids { get; set; }
}

パブリッシャー コンソール アプリ:

namespace ConsolePublisher
{
    class Program
    {
        static void Main(string[] args)
        {                
            Console.WriteLine("start publishing");

            // initialize bus 
            Bus.Initialize(config =>
            {
                config.UseMsmq();
                config.VerifyMsmqConfiguration();
                config.UseMulticastSubscriptionClient();
                config.UseControlBus();
                config.ReceiveFrom("msmq://localhost/test_queue");
            });

            Bus.Instance.Publish(new Message());
            Console.WriteLine("Message sent 1");

            var msg2 = new Message() { Ids ="1,2,3,4" };
            Bus.Instance.Publish(msg2);
            Console.WriteLine("Message sent 2");

            Console.Read();    
        }
    }
}

これら 2 つのコンソール アプリケーションを実行すると、メッセージがコンシューマーによって取得されないようです。何か案は?

乾杯!

4

1 に答える 1

6

パブリッシュを呼び出す前に、スリープ状態にしてみてください。マルチキャスト サブスクリプションは、2 つのインスタンスが互いに通信しているため、構成が完了するまで少し時間がかかる場合があります。また、パブリッシャーの前にコンシューマーを開始したことを確認してください。config.Subscribe(s => s.Instance(new Consumer()).Permanent());に置き換えることもconfig.Subscribe<Consumer>();役立つかもしれません。

先に進むと、プロセスの再起動間でサブスクリプション データを保持できる他のルーティング方法があります。これを理解したら、サブスクリプション サービス、静的ルーティング、または単に RabbitMQ を使用することを検討し始めます。

于 2013-01-23T12:07:57.957 に答える