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

}

}

相关推荐
giaz14n9X4 小时前
Redis 分布式锁进阶第五十七篇
数据库·redis·分布式
WyCAGy8ij5 小时前
Redis 分布式锁进阶第二篇讲解
数据库·redis·分布式
冰西瓜6007 小时前
深度学习的数学原理(四十二)—— 分布式训练
人工智能·分布式·深度学习
zzz_23688 小时前
【RabbitMQ】面试系列 · 第三期:从线上故障到架构选型
面试·架构·rabbitmq
小碗羊肉9 小时前
【RabbitMQ高级】如何保证消息的可靠性?
java·rabbitmq·java-rabbitmq
WyCAGy8ij15 小时前
Redis 分布式锁进阶第四篇讲解
数据库·redis·分布式
MrJson-架构师16 小时前
AgentScope Java 2.0:打造分布式、企业级智能体底座
java·开发语言·分布式
先跑起来再说16 小时前
Go 排行榜系统的工程化实现:分布式锁、快照表与定时刷新
分布式·go·gin
ACP广源盛1392462567317 小时前
GSV2231 三屏显示扩展芯片@ACP#RTX Spark AI 终端多屏协作专属解决方案
大数据·人工智能·分布式·信息可视化·spark·电脑·音视频
探客木木夕17 小时前
分布式全球类脑智能网络架构设计
网络·人工智能·分布式·边缘计算