去年研究了下RabbitMQ,花了几天时间自己搭建了一个环境,写了套代码玩了一下,实现了可以发送消息到指定队列,可以监听队列,并处理消息,一下为主要代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using RabbitMQ.Client;
using RabbitMQ.Client.Events;
using Utility;
namespace MQ.RabbitMQManager
{
/// <summary>
/// 作者:liuyang 2018-11-10
/// RabbitMQ管理类,用来操作消息队列
/// 功能:
/// 1.可以连接到MQ的主机。
/// 2.绑定Exchange和队列。
/// 3.推送消息到队列
/// 4.监听队列,使用委托处理消息
/// 5.标记消费者
/// 6.从队列中删除消费者
/// 7.端口连接
/// </summary>
public class RabbitMQManager
{
private readonly string _username;
private readonly string _password;
private readonly string _virtualHost;
private readonly string _hostname;
private readonly string _port;
private readonly string _exhange;
/// <summary>
/// MQ的连接
/// </summary>
private IConnection conn;
/// <summary>
/// MQ的model,用来绑定exchange和queue
/// </summary>
private IModel model;
/// <summary>
/// 消费者实例,用来监控队列里面的消息
/// </summary>
private EventingBasicConsumer consumer;
/// <summary>
/// 消费者标识,可以从服务器上取消活动的consumer
/// </summary>
private string _consumerTag;
/// <summary>
/// 是否创建连接
/// </summary>
private bool _isConnectionCreated=false;
/// <summary>
/// 连接是否打开
/// </summary>
private bool _isConnectionOpen=false;
/// <summary>
/// 队列是否已经绑定
/// </summary>
private bool _isQueueBind=false;
/// <summary>
/// 消费者是否已经实例化
/// </summary>
private bool _isConsumerExist=false;
/// <summary>
/// 构造函数
/// </summary>
/// <param name="username"></param>
/// <param name="password"></param>
/// <param name="virtualHost"></param>
/// <param name="hostName"></param>
/// <param name="port"></param>
/// <param name="exchangeName"></param>
public RabbitMQManager(string username,string password,string virtualHost,string hostName,string port,string exchangeName)
{
_username=username;
_password=password;
_virtualHost=virtualHost;
_hostname=hostName;
_port=port;
_exhange = exchangeName;
}
&nb