namespace RabbitMQSender
{
public class RabbitQHelper
{
private static IConnection conn;
private static RabbitQHelper rabbit;
public int persistMode = 1;
private RabbitQHelper()
{
}
/// <summary>
/// 获取Employee实例
/// </summary>
/// <returns></returns>
public static RabbitQHelper GeConn()
{
if (rabbit == null)
{
rabbit = new RabbitQHelper();
SetConnParam();
}
return rabbit;
}
/// <summary>
/// 创建连接
/// </summary>
public static void SetConnParam()
{
Uri uri = new Uri("amqp://192.168.1.56:5672/");
ConnectionFactory cf = new ConnectionFactory();
cf.UserName = "zlp"; //某个vhost下的用户
cf.Password = "123456";
cf.VirtualHost = "/"; //vhost
cf.RequestedHeartbeat = 0;
cf.Endpoint = new AmqpTcpEndpoint(uri);
//创建一个连接到具体总结点的连接
conn = cf.CreateConnection();
}
/// <summary>
/// 创建队列
/// </summary>
/// <param name="queueName"></param>
/// <returns></returns>
public bool CreateQueue(string queueName)
{
try
{
//创建并返回一个新连接到具体节点的通道
using (IModel ch = conn.CreateModel())
{
//声明一个路由
ch.ExchangeDeclare("fanoutE", "fanout");
//声明一个队列
ch.QueueDeclare(queueName, true, false, false, null);
//将一个队列和一个路由绑定起来。并制定路由关键字
//ch.QueueBind("q", "fanoutE", routingKey);
ch.QueueBind(queueName, "fanoutE", "fanoutk"); //fanout模式publish的时候不需要routingKey,只要绑定了的Q都能接收
}
}
catch (Exception ex)
{
return false;
}
return true;
}
public bool SendMessage(string exchangeName,string header, string content)
{
try
{
using (IModel ch = conn.CreateModel())
{
///构造消息实体对象并发布到消息队列上
IMapMessageBuilder b = new MapMessageBuilder(ch);
var target = b.Headers;
target["header"] = header;
var targerBody = b.Body;
targerBody["body"] = content;//这个才是具体的发送内容
if (persistMode == 1)
{
//设定传输模式
((IBasicProperties)b.GetContentHeader()).DeliveryMode = 2;
}
//写入
ch.BasicPublish("fanoutE", "", (IBasicProperties)b.GetContentHeader(), b.GetContentBody());
}
}
catch (Exception ex)
{
return false;
}
return true;
}
public string ReceiveMessage(string queueName)
{
string s = "";
using (IModel ch = conn.CreateModel())
{
ch.BasicQos(0, 2, false);
var consumer = new QueueingBasicConsumer(ch);
ch.BasicConsume(queueName, false, consumer);
var ea = (BasicDeliverEventArgs)consumer.Queue.Dequeue();
var body = ea.Body;
var message = Encoding.UTF8.GetString(body);
int msgIndex = message.IndexOf('{');
s = message.Substring(msgIndex, message.Length - msgIndex);
ch.BasicAck(ea.DeliveryTag, false);
}
return s;
}
}
}
{
public class RabbitQHelper
{
private static IConnection conn;
private static RabbitQHelper rabbit;
public int persistMode = 1;
private RabbitQHelper()
{
}
/// <summary>
/// 获取Employee实例
/// </summary>
/// <returns></returns>
public static RabbitQHelper GeConn()
{
if (rabbit == null)
{
rabbit = new RabbitQHelper();
SetConnParam();
}
return rabbit;
}
/// <summary>
/// 创建连接
/// </summary>
public static void SetConnParam()
{
Uri uri = new Uri("amqp://192.168.1.56:5672/");
ConnectionFactory cf = new ConnectionFactory();
cf.UserName = "zlp"; //某个vhost下的用户
cf.Password = "123456";
cf.VirtualHost = "/"; //vhost
cf.RequestedHeartbeat = 0;
cf.Endpoint = new AmqpTcpEndpoint(uri);
//创建一个连接到具体总结点的连接
conn = cf.CreateConnection();
}
/// <summary>
/// 创建队列
/// </summary>
/// <param name="queueName"></param>
/// <returns></returns>
public bool CreateQueue(string queueName)
{
try
{
//创建并返回一个新连接到具体节点的通道
using (IModel ch = conn.CreateModel())
{
//声明一个路由
ch.ExchangeDeclare("fanoutE", "fanout");
//声明一个队列
ch.QueueDeclare(queueName, true, false, false, null);
//将一个队列和一个路由绑定起来。并制定路由关键字
//ch.QueueBind("q", "fanoutE", routingKey);
ch.QueueBind(queueName, "fanoutE", "fanoutk"); //fanout模式publish的时候不需要routingKey,只要绑定了的Q都能接收
}
}
catch (Exception ex)
{
return false;
}
return true;
}
public bool SendMessage(string exchangeName,string header, string content)
{
try
{
using (IModel ch = conn.CreateModel())
{
///构造消息实体对象并发布到消息队列上
IMapMessageBuilder b = new MapMessageBuilder(ch);
var target = b.Headers;
target["header"] = header;
var targerBody = b.Body;
targerBody["body"] = content;//这个才是具体的发送内容
if (persistMode == 1)
{
//设定传输模式
((IBasicProperties)b.GetContentHeader()).DeliveryMode = 2;
}
//写入
ch.BasicPublish("fanoutE", "", (IBasicProperties)b.GetContentHeader(), b.GetContentBody());
}
}
catch (Exception ex)
{
return false;
}
return true;
}
public string ReceiveMessage(string queueName)
{
string s = "";
using (IModel ch = conn.CreateModel())
{
ch.BasicQos(0, 2, false);
var consumer = new QueueingBasicConsumer(ch);
ch.BasicConsume(queueName, false, consumer);
var ea = (BasicDeliverEventArgs)consumer.Queue.Dequeue();
var body = ea.Body;
var message = Encoding.UTF8.GetString(body);
int msgIndex = message.IndexOf('{');
s = message.Substring(msgIndex, message.Length - msgIndex);
ch.BasicAck(ea.DeliveryTag, false);
}
return s;
}
}
}