当前位置: 首页 > article >正文

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


http://www.kler.cn/a/105358.html

相关文章:

  • OpenGL —— 2.9、摄像机之模拟CS鼠标视角转动(附源码,glfw+glad)
  • CRC校验的计算方法和示例
  • 【Kotlin精简】第6章 反射
  • 解释一下React中的钩子(hooks),例如useState和useEffect。
  • 视频号视频提取小程序,快速下载视频号视频
  • 问题:EventSource 收不到流数据及 EventSource 的 onmessage 方法为null
  • 设计模式:观察者模式(C#、JAVA、JavaScript、C++、Python、Go、PHP)
  • 不开源项目aspose.cells最新版23.10的一些科普
  • 性能测试的指南:测试类型、性能测试步骤、最佳实践等!
  • rapidocr_paddle[gpu]:GPU端推理库来了
  • Flutter GetX使用详解
  • muduo源码剖析之AsyncLogging异步日志类
  • Kafka - 图解生产者消息发送流程
  • UE5 Blueprint发送http请求
  • MarkDown详细入门笔记
  • 软考系列(系统架构师)- 2014年系统架构师软考案例分析考点
  • server error: Preprocessor dependency “less“ not found. Did you install it?
  • Java Boolean类,Java Character类,Java Number类
  • 【Java-框架-SpringMVC】(01) SpringMVC框架的简单创建与使用,快速上手 - 简易版
  • Tomcat+nginx负载均衡和动静分离