RabbitMQ 链接管理-发布者-消费者

RabbitMQ连接管理器

using RabbitMQ.Client;

using System;

public class RabbitMQConnectionManager

{

private readonly IConnectionFactory _connectionFactory;

private IConnection _connection;

public RabbitMQConnectionManager(string hostName)

{

_connectionFactory = new ConnectionFactory() { HostName = hostName };

}

public IModel CreateModel()

{

if (_connection == null || !_connection.IsOpen)

{

_connection = _connectionFactory.CreateConnection();

}

return _connection.CreateModel();

}

public void CloseConnection()

{

if (_connection != null && _connection.IsOpen)

{

_connection.Close();

}

}

}

RabbitMQ发布者

using RabbitMQ.Client;

using System.Text;

public class RabbitMQPublisher

{

private readonly RabbitMQConnectionManager _connectionManager;

private readonly string _queueName;

public RabbitMQPublisher(RabbitMQConnectionManager connectionManager, string queueName)

{

_connectionManager = connectionManager;

_queueName = queueName;

}

public void Publish(string message)

{

using (var channel = _connectionManager.CreateModel())

{

channel.QueueDeclare(queue: _queueName,

durable: false,

exclusive: false,

autoDelete: false,

arguments: null);

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

channel.BasicPublish(exchange: "",

routingKey: _queueName,

basicProperties: null,

body: body);

}

}

}

RabbitMQ消费者

using RabbitMQ.Client;

using RabbitMQ.Client.Events;

using System;

using System.Text;

public class RabbitMQConsumer

{

private readonly RabbitMQConnectionManager _connectionManager;

private readonly string _queueName;

public RabbitMQConsumer(RabbitMQConnectionManager connectionManager, string queueName)

{

_connectionManager = connectionManager;

_queueName = queueName;

}

public void Consume()

{

var channel = _connectionManager.CreateModel();

channel.QueueDeclare(queue: _queueName,

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 {0}", message);

};

channel.BasicConsume(queue: _queueName,

autoAck: true,

consumer: consumer);

}

}

使用

class Program

{

static void Main(string[] args)

{

var connectionManager = new RabbitMQConnectionManager("localhost");

var queueName = "hello";

var consumer = new RabbitMQConsumer(connectionManager, queueName);

consumer.Consume();

var publisher = new RabbitMQPublisher(connectionManager, queueName);

publisher.Publish("Hello World!");

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

Console.ReadLine();

connectionManager.CloseConnection();

}

}

相关推荐
鬼先生_sir14 小时前
RabbitMQ 全面解析(完整版)
分布式·rabbitmq
Francek Chen17 小时前
【大数据存储与管理】分布式数据库HBase:06 HBase编程实践
大数据·数据库·hadoop·分布式·hbase
yuweiade18 小时前
使用 Docker 部署 RabbitMQ 的详细指南
docker·容器·rabbitmq
柒.梧.18 小时前
Redis架构演进:从主从到Cluster,读懂高可用与分布式核心
redis·分布式·架构
渔民小镇18 小时前
不用前端也能测试 —— 模拟客户端请求模块详解
java·服务器·前端·分布式·游戏
IT莫染19 小时前
Spring Boot 集成 RabbitMQ MQTT 协议实现消息通信
rabbitmq
星辰_mya19 小时前
雪花算法:分布式世界的“身份证号”
分布式
AIminminHu20 小时前
OpenGL渲染与几何内核那点事-项目实践理论补充(一-2-(3)-当你的协同CAD服务器面临“千人同屏”时:从单机优化到分布式高并发)
运维·服务器·分布式
真上帝的左手21 小时前
12. 消息队列-RabbitMQ-高可用核心机制
分布式·rabbitmq·java-rabbitmq·mq
xiaohuoji1291 天前
SpringBoot中整合RabbitMQ(测试+部署上线 最完整)
spring boot·rabbitmq·java-rabbitmq