RabbitMQSender
来源:互联网 发布:淘宝店运营工作职责 编辑:程序博客网 时间:2024/06/04 23:36
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;
}
}
}
0 0
- RabbitMQSender
- axis2 1.5.5 + Websphere 8.0 ,FileUploadException 与 NoInitialContextException 的解决办法
- 听故事搞懂多线程开发-- 屎壳郎老板和它的收费公厕
- Centos中将openjdk切换为Oracle Jdk导致Tomcat无法正常启动的问题
- 现今市场对异构并行计算领域人员的需求
- 数组名a与&a的区别
- RabbitMQSender
- 【记录帖】svn常用命令
- POJ 1459
- iOS 9学习系列:如何使用ATS提高应用的安全性
- Gulp构建Android项目,安装APK
- Unity动态生成带碰撞体的LineRenderer
- 将Maven项目打包成可执行jar文件(引用第三方jar)
- 九度oj 1117
- ZOJ 3790 Consecutive Blocks(尺取法)