开源消息队列比较

目录

1. Apache Kafka

1.1安装步骤

1.1.1使用Docker安装

1.1.1手动安装

1.2 C#使用示例代码

1.2.1 安装Confluent.Kafka

1.2.2生产者代码示例

1.2.3消费者代码示例

1.3特点

1.4使用场景

2. RabbitMQ

2.1安装步骤

2.1.1使用Docker安装

2.1.2手动安装

2.2 C#使用示例代码

2.2.1安装RabbitMQ.Client

2.2.2生产者代码示例

2.2.3消费者代码示例

2.3特点

2.4使用场景

3. Apache ActiveMQ

3.1安装步骤

3.1.1使用Docker安装

3.1.2手动安装

3.2 C#使用示例代码

3.2.1安装Apache.NMS.ActiveMQ

3.2.2生产者代码示例

3.2.3消费者代码示例

3.3特点

3.4使用场景

4. Redis (with Redis Streams)

4.1安装步骤

4.1.1使用Docker安装

4.1.2手动安装

4.2 C#使用示例代码

4.2.1安装StackExchange.Redis

4.2.2生产者代码示例

4.2.3消费者代码示例

4.3特点

4.4使用场景

5. NATS

5.1安装步骤

5.1.1使用Docker安装

5.1.2手动安装

5.2 C#使用示例代码

5.2.1安装NATS.Client

5.2.2生产者代码示例

5.2.3消费者代码示例

5.3特点

5.4使用场景

6. Apache Pulsar

6.1安装步骤

6.1.1使用Docker安装

6.1.2手动安装

6.2 C#使用示例代码

6.2.1安装Pulsar.Client.Api

6.2.2生产者代码示例

6.2.3消费者代码示例

6.3特点

6.4使用场景

7. ZeroMQ

7.1安装步骤

7.1.1使用Docker安装

7.1.2手动安装

7.2 C#使用示例代码

7.2.1安装NetMQ

7.2.2生产者代码示例

7.2.3消费者代码示例

7.3特点

7.4使用场景

8. Apache RocketMQ

8.1安装步骤

8.1.1使用Docker安装

8.1.2手动安装

8.2 C#使用示例代码

8.2.1安装RocketMQ.Client

8.2.2生产者代码示例

8.2.3消费者代码示例

8.3特点

8.4使用场景

9. NSQ

9.1安装步骤

9.1.1使用Docker安装

9.1.2手动安装

9.2 C#使用示例代码

9.2.1安装NsqSharp

9.2.2生产者代码示例

9.2.3消费者代码示例

9.3特点

9.4使用场景

10. Kafka Streams

10.1安装步骤

10.2 C#使用示例代码

10.3特点

10.4使用场景

11.特点对比

12.使用场景对比

13.选型策略


1. Apache Kafka

1.1安装步骤

1.1.1使用Docker安装

docker-compose.yml:

version: '2'

services:

  zookeeper:

    image: wurstmeister/zookeeper:3.4.6

    ports:

     - "2181:2181"

  kafka:

    image: wurstmeister/kafka:2.12-2.3.0

    ports:

     - "9092:9092"

    environment:

      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://localhost:9092

      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181

    volumes:

     - /var/run/docker.sock:/var/run/docker.sock

1.1.1手动安装

下载Kafka二进制文件:

wget https://downloads.apache.org/kafka/2.8.0/kafka_2.13-2.8.0.tgz

解压文件并进入目录:tar -xzf kafka_2.13-2.8.0.tgzcd kafka_2.13-2.8.0

启动Zookeeper:

bin/zookeeper-server-start.sh config/zookeeper.properties

启动Kafka服务器:

bin/kafka-server-start.sh config/server.properties

1.2 C#使用示例代码

1.2.1 安装Confluent.Kafka

在你的C#项目中安装Confluent.Kafka包:

dotnet add package Confluent.Kafka

1.2.2生产者代码示例

using Confluent.Kafka;using System;using System.Threading.Tasks;

class Program

{

    public static async Task Main(string[] args)

    {

        var config = new ProducerConfig { BootstrapServers = "localhost:9092" };

        using (var producer = new ProducerBuilder<Null, string>(config).Build())

        {

            try

            {

                var deliveryResult = await producer.ProduceAsync("test-topic", new Message<Null, string> { Value = "Hello Kafka" });

                Console.WriteLine($"Delivered '{deliveryResult.Value}' to '{deliveryResult.TopicPartitionOffset}'");

            }

            catch (ProduceException<Null, string> e)

            {

                Console.WriteLine($"Delivery failed: {e.Error.Reason}");

            }

        }

    }

}

1.2.3消费者代码示例

using Confluent.Kafka;using System;using System.Threading;

class Program

{

    public static void Main(string[] args)

    {

        var config = new ConsumerConfig

        {

            GroupId = "test-consumer-group",

            BootstrapServers = "localhost:9092",

            AutoOffsetReset = AutoOffsetReset.Earliest

        };

        using (var consumer = new ConsumerBuilder<Null, string>(config).Build())

        {

            consumer.Subscribe("test-topic");

            try

            {

                while (true)

                {

                    var consumeResult = consumer.Consume(CancellationToken.None);

                    Console.WriteLine($"Consumed message '{consumeResult.Message.Value}' at: '{consumeResult.TopicPartitionOffset}'.");

                }

            }

            catch (OperationCanceledException)

            {

                consumer.Close();

            }

        }

    }

}

1.3特点

  • 高吞吐量:适合处理大量数据流。
  • 分布式架构:易于扩展和容错。
  • 持久化:消息存储在磁盘上,保证数据安全。

1.4使用场景

  • 日志收集与分析。
  • 大数据管道。
  • 实时流处理。

2. RabbitMQ

2.1安装步骤

2.1.1使用Docker安装

docker run -d --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:3-management

2.1.2手动安装

下载RabbitMQ:

wget https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.8.16/rabbitmq-server-generic-unix-3.8.16.tar.xz

解压文件并进入目录:

tar -xvf rabbitmq-server-generic-unix-3.8.16.tar.xz

cd rabbitmq_server-3.8.16/sbin

启动RabbitMQ:

./rabbitmq-server

2.2 C#使用示例代码

2.2.1安装RabbitMQ.Client

在你的C#项目中安装RabbitMQ.Client包:

dotnet add package RabbitMQ.Client

2.2.2生产者代码示例

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

class Program

{

    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 RabbitMQ";

            var body = Encoding.UTF8.GetBytes(message);

            channel.BasicPublish(exchange: "", routingKey: "hello", basicProperties: null, body: body);

            Console.WriteLine($" [x] Sent {message}");

        }

    }

}

2.2.3消费者代码示例

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

class Program

{

    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.ToArray();

                var message = Encoding.UTF8.GetString(body);

                Console.WriteLine($" [x] Received {message}");

            };

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

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

            Console.ReadLine();

        }

    }

}

2.3特点

  • 可靠性:支持持久化、消息确认和发布确认。
  • 灵活的路由:支持多种交换类型(direct、topic、headers和fanout)。
  • 插件系统:可扩展功能。

2.4使用场景

  • 异步任务处理。
  • 实时消息传递。
  • 微服务通信。

3. Apache ActiveMQ

3.1安装步骤

3.1.1使用Docker安装

docker run -d --name activemq -p 61616:61616 -p 8161:8161 rmohr/activemq

3.1.2手动安装

下载ActiveMQ:

wget https://archive.apache.org/dist/activemq/5.16.3/apache-activemq-5.16.3-bin.tar.gz

解压文件并进入目录:

tar -xzf apache-activemq-5.16.3-bin.tar.gzcd apache-activemq-5.16.3

启动ActiveMQ:

./bin/activemq start

3.2 C#使用示例代码

3.2.1安装Apache.NMS.ActiveMQ

在你的C#项目中安装Apache.NMS.ActiveMQ包:

dotnet add package Apache.NMS.ActiveMQ

3.2.2生产者代码示例

using Apache.NMS;using Apache.NMS.ActiveMQ;using System;

class Program

{

    public static void Main()

    {

        IConnectionFactory factory = new ConnectionFactory("tcp://localhost:61616");

        using (IConnection connection = factory.CreateConnection())

        using (ISession session = connection.CreateSession()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

张3蜂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值