2016-07-13 31 views
0

私はC#でRabbitMQクライアントを使用する方法についてのチュートリアルを行ってきました。私は、サーバーにハローワールドのメッセージを送信しようとしていると私は送信が成功したことを知っているように私の最後にそれを受け取る。 tutorialは、クラスを送るための以下のクラスファイルの定義を与え、受け取る:rabbitMQと同じメッセージを送受信します

Send.cs

using System; 
using RabbitMQ.Client; 
using System.Text; 

class Send 
{ 
    public static void Main() 
    { 
     var factory = new ConnectionFactory() { HostName = "localhost" }; 
     using(var connection = factory.CreateConnection()) 
     using(var channel = connection.CreateModel()) 
     { 
      channel.QueueDeclare(queue: "hello", 
           durable: false, 
           exclusive: false, 
           autoDelete: false, 
           arguments: null); 

      string message = "Hello World!"; 
      var body = Encoding.UTF8.GetBytes(message); 

      channel.BasicPublish(exchange: "", 
           routingKey: "hello", 
           basicProperties: null, 
           body: body); 
      Console.WriteLine(" [x] Sent {0}", message); 
     } 

     Console.WriteLine(" Press [enter] to exit."); 
     Console.ReadLine(); 
    } 
} 

Receive.csを

using RabbitMQ.Client; 
using RabbitMQ.Client.Events; 
using System; 
using System.Text; 

class Receive 
{ 
    public static void Main() 
    { 
     var factory = new ConnectionFactory() { HostName = "localhost" }; 
     using(var connection = factory.CreateConnection()) 
     using(var channel = connection.CreateModel()) 
     { 
      channel.QueueDeclare(queue: "hello", 
           durable: false, 
           exclusive: false, 
           autoDelete: false, 
           arguments: null); 

      var consumer = new EventingBasicConsumer(channel); 
      consumer.Received += (model, ea) => 
      { 
       var body = ea.Body; 
       var message = Encoding.UTF8.GetString(body); 
       Console.WriteLine(" [x] Received {0}", message); 
      }; 
      channel.BasicConsume(queue: "hello", 
           noAck: true, 
           consumer: consumer); 

      Console.WriteLine(" Press [enter] to exit."); 
      Console.ReadLine(); 
     } 
    } 
} 

私はプロジェクトを実行(視覚的でスタジオ)、私は、両方のクラスがを持っているという事実によって引き起こされている定義されている複数のエントリポイントがあるというエラーが出ています方法。私はスタートアッププロジェクトを指定しようとしましたので、どのメインを使うべきか分かっていましたが、そのオプションは見えませんでした。

チュートリアルで両方のファイルが意図的にこのように構成されているため、どのメインを使用するべきかわかりません。私は最近C++でプログラミングをしていたので、C#ではやや錆びています。

両方のクラスをインスタンス化するメインファイルがあるはずですか?そうでない場合、プロジェクトはどのように構成されるべきですか?

+0

別々に実行する必要があるようです。 VSを実行したい場合は、別のインスタンスで開き、[送信]、[受信]の順に実行します。 –

+0

@VivekChavda VSで実行している場合、それらのプロジェクトが別々のプロジェクトになるはずですか? – loremIpsum1771

+0

はい、別々の実行可能ファイルが作成されるため、別々のプロジェクトになります。 http://stackoverflow.com/questions/4775187/visual-studio-how-to-create-a-project-that-would-compile-2-exe-files –

答えて

1

送受信コードは、同じC#プロジェクト内にあることを意図していませんでした。

サンプルで明示的に呼び出されていませんが、これらはプロジェクトと別の実行可能ファイルである必要があります。

split send.csと受信します。自分のプロジェクトにCS

あなたは、あなたがこの時点で受け取るプロジェクト

を実行し、メッセージがRabbitMQのサーバーに自分のキューに

を座って表示されますセンドプロジェクト第一

を実行しますメッセージが予想どおりに消費されるのを見ます。

-1

離婚者:私はC#について知らない。

最初に:これは本当に基本的なプログラミングです。 2つのエントリポイントを持つことはできません。javaやC++のようないくつかの言語では、どのプログラムでも「メイン関数」として知られています。私が言ったように、これはかなり基本的なものなので、私はこれ以上詳しく説明しません。

第2:質問で提供したリンクのチュートリアルWORKS。それだけでそれを読むとそれはそれです。

サード:あなたがここに一つのプログラムとしてこれを持っているしたい場合は、コードは(はい、私はC#のを知らないことを知っているが、私は信仰の飛躍を作ります)です:

using System; 
using System.Text; 
using RabbitMQ.Client; 
using RabbitMQ.Client.Events; 

class SendReceive 
{ 
    public static void Main() 
    { 
     var factory = new ConnectionFactory() { HostName = "localhost" }; 
     using(var connection = factory.CreateConnection()) 
     using(var channel = connection.CreateModel()) 
     { 
      channel.QueueDeclare(queue: "hello", 
           durable: false, 
           exclusive: false, 
           autoDelete: false, 
           arguments: null); 

      string message = "Hello World!"; 
      var body = Encoding.UTF8.GetBytes(message); 

      var consumer = new EventingBasicConsumer(channel); 
      consumer.Received += (model, ea) => 
      { 
       var body = ea.Body; 
       var message = Encoding.UTF8.GetString(body); 
       Console.WriteLine(" [x] Received {0}", message); 
      }; 

      channel.BasicPublish(exchange: "", 
           routingKey: "hello", 
           basicProperties: null, 
           body: body); 
      Console.WriteLine(" [x] Sent {0}", message); 

      channel.BasicConsume(queue: "hello", 
      noAck: true, 
      consumer: consumer); 

     } 
     Console.WriteLine(" Press [enter] to exit."); 
     Console.ReadLine(); 
    } 
} 

追加:あなたはいくつかのシナリオでは接続できないと述べましたが、@ VivekChavdaのようにそれは別の質問です。

関連する問題