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

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.lryc.cn/news/212138.html

相关文章:

  • JAVA中的垃圾回收器(3)----ZGC
  • IDEA 如何运行 SpringBoot 项目
  • Linux MeterSphere测试平台远程访问你不会?来试试这篇文章
  • 15.k8s集群防火墙配置
  • Python beautifulsoup网络抓取和解析cnblog首页帖子数据
  • Java集成腾讯云OCR身份证识别接口
  • C++之C++11引入enum class与传统enum关键字总结(二百五十一)
  • 如何将word格式的文档转换成markdown格式的文档
  • Leetcode—2558.从数量最多的堆取走礼物【简单】
  • 【如何写论文】硕博学位论文的结构框架、过程与大纲分析
  • 砷化镓(GaAs)纳米线 砷化镓纳米线 GaAs纳米线 瑞禧
  • PostGreSQL:JSON|JSONB数据类型
  • 树----数据结构
  • GitLab定时备份
  • SQL IN 运算符
  • 虚拟机构建单体项目及前后端分离项目
  • 代码浅析DLIO(一)---整体框架梳理
  • Springboot的Container Images,docker加springboot
  • c 从avi 视频中提取图片
  • Jtti:Apache服务的反向代理及负载均衡怎么配置
  • 82.二分查找
  • 线程是如何创建的
  • owl_vit安装步骤
  • 运行real.exe时出现NUM_METGRID_SOIL_LEVELS=0
  • 【数值计算方法】Gauss消元法及其Python/C实现
  • ins老被封禁?快来看看这些雷区你踩了没!
  • 《Effective Java》读书笔记(1-2章)
  • C++版split(‘_‘)函数
  • Leaky singletons的一种使用场景
  • TensorFlow图像多标签分类实例