"ファンアウト"交換タイプを使用してパブリッシュ/サブスクライブを実装するサンプルコードを使用しています。しかし、下のコードのように、サブスクライバは公開されている 'Hello Word'メッセージを表示していません。RabbitMQ Pub/Subサブスクライバはメッセージを受信できません
Publisher.cs
var factory = new ConnectionFactory() { HostName = "localhost" };
using (var connection = factory.CreateConnection())
using (var channel = connection.CreateModel())
{
channel.ExchangeDeclare(exchange: "logs", type: "fanout");
var message = GetMessage(args);
var body = Encoding.UTF8.GetBytes(message);
channel.BasicPublish(exchange: "logs",
routingKey: "",
basicProperties: null,
body: body);
Console.WriteLine(" [x] Sent {0}", message);
}
Console.WriteLine(" Press [enter] to exit.");
Console.ReadLine();
}
private static string GetMessage(string[] args)
{
return ((args.Length > 0)
? string.Join(" ", args)
: "info: Hello World!");
}
Subscriber.cs
var factory = new ConnectionFactory() { HostName = "localhost" };
using (var connection = factory.CreateConnection())
using (var channel = connection.CreateModel())
{
channel.ExchangeDeclare(exchange: "logs", type: "fanout");
var queueName = channel.QueueDeclare().QueueName;
channel.QueueBind(queue: queueName,
exchange: "logs",
routingKey: "");
Console.WriteLine(" [*] Waiting for logs.");
var consumer = new EventingBasicConsumer(channel);
consumer.Received += (model, ea) =>
{
var body = ea.Body;
var message = Encoding.UTF8.GetString(body);
Console.WriteLine(" [x] {0}", message);
};
channel.BasicConsume(queue: queueName,
noAck: true,
consumer: consumer);
Console.WriteLine(" Press [enter] to exit.");
Console.ReadLine();
}
コード参考:https://www.rabbitmq.com/tutorials/tutorial-three-dotnet.html
どのようなエラーが表示されますか?これはあなたが提供したリンクとまったく同じコードですか? – cantSleepNow
@cantSleepNow:いいえ、何もエラーが発生していません。パブリッシャ用の2つのコンソールアプリケーションとsubscriber.so用の2つのコンソールアプリケーションを作成しました。最初にパブリッシャアプリケーションを実行してからサブスクライバを実行しています。 – Dev
パブリッシャーよりも最初のサブスクライバを試してみるとどうなりますか? – cantSleepNow