如何在.Net中与不同类型的消费者一起使用RabbitMq消息



消息类型:"PublishX"

消费者:

类型1消费者X

类型2ConsumerX

Type3ConsumerX

所有消费者都必须立即捕捉消息,但在自己内部同步消费。。

例如,队列中有100条"PublishX"消息。Type1ConsumerX消耗了30条消息(同步),Type2ConsumerX(同步)消耗了50条消息,Type3ConsumerX花费了100条消息(同期)。我如何知道消息被"所有类型的消费者"消费?

  • RabbitMQ/MassTransit是否可以向消费者推送消息?

  • RabbitMQ/MassTransit能否以间隔(1s)推送消息(合并消息)以减少网络流量?

  • RabbitMQ/MassTransit能否将相同的消息推送给不同类型的消费者?

如果我正确理解了这个问题,你只需要设置一个基本的pub/sub模式。这将允许您向多个消费者传递相同的消息。

示例发布者:

public static void PublishMessageToFanout()
{
    var factory = new ConnectionFactory { HostName = "localhost" };
    using (var connection = factory.CreateConnection())
    using (var channel = connection.CreateModel())
    {
        channel.ExchangeDeclare("messages", "fanout");
        var message = new Message { Text = "This is a message to send" };
        var json = JsonConvert.SerializeObject(message);
        var body = Encoding.UTF8.GetBytes(json);
        channel.BasicPublish("messages", string.Empty, null, body);
    }
}

示例消费者:

SubscribeToMessages("sms-messages", (s) => Console.WriteLine("SMS Message: {0}", s));
SubscribeToMessages("email-messages", (s) => Console.WriteLine("Email Message: {0}", s));
public static void SubscribeToMessages(string queueName, Action<string> messageAction)
{
    var factory = new ConnectionFactory() { HostName = "localhost" };
    using (var connection = factory.CreateConnection())
    using (var channel = connection.CreateModel())
    {
        channel.ExchangeDeclare("messages", "fanout");
        channel.QueueDeclare(queueName, true, false, false, null);
        channel.QueueBind(queueName, "messages", string.Empty);
        var consumer = new QueueingBasicConsumer(channel);
        channel.BasicConsume(queueName, true, consumer);
        while (true)
        {
            var ea = consumer.Queue.Dequeue();
            var body = ea.Body;
            var message = Encoding.UTF8.GetString(body);
            messageAction(message);
        }
    }
}

如果你在单独的进程或控制台应用程序中运行SubscribeToMessages循环,你会看到每当你调用PublishMessageToFanout时,它们都会打印出消息。您还将看到这两个队列都存在于"队列"下的RabbitMQ管理中。

关于问题的MassTransit部分

  1. RabbitMQ/MassTransit向消费者发送推送消息?是的,MassTransit将消息发布到总线上,然后消费者对其进行处理

  2. RabbitMQ/MassTransit能否以间隔(1s)推送消息(合并消息)以减少网络流量?不知道是否有这样的功能,你可以自己写,但你必须非常小心,以免丢失消息。

  3. RabbitMQ/MassTransit能否将相同的消息推送给不同类型的消费者?是的,多个使用者可以使用相同类型的消息。

我写了一个简单的helloworld应用程序,它展示了一些基础知识-http://nodogmablog.bryanhogan.net/2015/04/mass-transit-with-rabbitmq-hello-world/

最新更新