目录
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()