我正在使用RabbitMQ进行项目。我的代码如下。
制片人:
public static void Main()
{
var factory = new ConnectionFactory() { HostName = "localhost" };
using (var connection = factory.CreateConnection())
{
using (var channel = connection.CreateModel())
{
channel.QueueDeclare("hello", false, false, false, null);
string message = "Hello World!";
var body = Encoding.UTF8.GetBytes(message);
channel.BasicPublish("", "hello", null, body);
Console.WriteLine(" [x] Sent {0}", message);
}
}
}
交易所消费者声明:
public static void Main()
{
var factory = new ConnectionFactory() { HostName = "localhost" };
using (var connection = factory.CreateConnection())
{
using (var channel = connection.CreateModel())
{
channel.ExchangeDeclare("hello", "direct",false, false, false, null);
channel.QueueDeclare("hello", false, false, false, null);
var consumer = new QueueingBasicConsumer(channel);
channel.BasicConsume("hello", true, consumer);
Console.WriteLine(" [*] Waiting for messages." +
"To exit press CTRL+C");
while (true)
{
var ea = (BasicDeliverEventArgs)consumer.Queue.Dequeue();
var body = ea.Body;
var message = Encoding.UTF8.GetString(body);
Console.WriteLine(" [x] Received {0}", message);
}
}
}
没有交易所的消费者声明:
public static void Main()
{
var factory = new ConnectionFactory() { HostName = "localhost" };
using (var connection = factory.CreateConnection())
{
using (var channel = connection.CreateModel())
{
channel.QueueDeclare("hello", false, false, false, null);
var consumer = new QueueingBasicConsumer(channel);
channel.BasicConsume("hello", true, consumer);
Console.WriteLine(" [*] Waiting for messages." +
"To exit press CTRL+C");
while (true)
{
var ea = (BasicDeliverEventArgs)consumer.Queue.Dequeue();
var body = ea.Body;
var message = Encoding.UTF8.GetString(body);
Console.WriteLine(" [x] Received {0}", message);
}
}
}
两种消费者代码都可以正常工作,那么声明交换的主要用途是什么?我很迷惑。谁能澄清?
发布到队列仅允许您实现基本的发布-订阅方案,其中生产者和使用者使用确切的队列。在有多个使用者的情况下,单个消息队列在多个使用者之间分配。
通过发布到交换,由于交换和队列之间的路由,您可以创建复杂的方案。
例如,扇出交换机将消息路由到所有绑定的队列。这样,您可以有一个生产者和多个使用者,并且每条消息都独立复制到所有绑定队列并独立接收。
交换的另一个示例是主题交换,它根据消息中的路由键和队列上的模式将消息路由到绑定的队列。这引入了标记消息并有条件地传递消息的有趣可能性。
有关交换类型及其配置文件的完整参考,请参考文档:
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句