Rabbitmq(三)
1.在服务器安装好rabbitmq后,自己配置自己用的vhost,exchange和queue的绑定
2.项目添加RabbitMqClient.dll(nuget获取)引用
3.添加helper就可以使用了
a.RabbitMqHelper
using koala.application.models;
using RabbitMQ.Client;
using RabbitMQ.Client.Events;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace koala.dataaccess.nosql
{
public class RabbitMqHelper
{ private static IConnection Iconection;
private static object _lock = new object();
public static IConnection GetIconection()
{
try
{
if (Iconection == null)
{
lock (_lock)
{
if (Iconection == null || !Iconection.IsOpen)
{
Iconection = GetFactory().CreateConnection();
} }
}
}
catch (Exception ex)
{
}
return Iconection;
}
public static ConnectionFactory GetFactory()
{
string mqConnectStrings = ConfigurationManager.AppSettings["mqConnectStrings"];
string[] arry = mqConnectStrings.Split(';');
string host = arry[0];
int port = Convert.ToInt32(arry[1]);
string vhost = arry[2];
string userName = arry[3];
string pwd = arry[4];
ConnectionFactory factory = new ConnectionFactory() { HostName = host, Port = port, VirtualHost = vhost, UserName = userName, Password = pwd };
return factory;
}
/// <summary>
/// 发布消息
/// </summary>
/// <param name="msg"></param>
public static void PublishMsg(MQMessage msg)
{ using (IConnection conn = GetFactory().CreateConnection())
{
using (IModel channel = conn.CreateModel())
{
byte[] buffer = Encoding.UTF8.GetBytes(msg.Msg);
IBasicProperties properties = channel.CreateBasicProperties();
properties.DeliveryMode = 2;
channel.BasicPublish(msg.Exchange, msg.RouteKey, properties, buffer);
}
}
}
/// <summary>
/// 消费消息
/// </summary>
/// <param name="routekey"></param>
/// <param name="myproc"></param>
public static void ConsumeMsg(string routekey, Action<string> myproc)
{ using (var connection = GetIconection())
using (var channel = connection.CreateModel())
{
var consumer = new QueueingBasicConsumer(channel);
channel.BasicQos(0, 2, false);
channel.BasicConsume(queue: routekey,
noAck: true,//和tcp协议的ack一样,为false则服务端必须在收到客户端的回执(ack)后才能删除本条消息
consumer: consumer);
while (true)
{
try
{
BasicDeliverEventArgs ea = (BasicDeliverEventArgs)consumer.Queue.Dequeue();
string message = Encoding.UTF8.GetString(ea.Body);
myproc(message);
}
catch (Exception)
{
break;
}
} } }
}
}
b.MQMessage
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace koala.application.models
{
public class MQMessage
{ public string Msg { get; set; }
public string Exchange { get; set; }
public string RouteKey { get; set; } }
}
c.webconfig
<add key="mqConnectStrings" value="ip;port;vhostName;Username;pwd" />
<add key="mqExchange" value="amq.direct" />
<add key="routKeySingle" value="im.msg.single" />
d.发送消息
发送消息
private static string mqExchange = ConfigurationManager.AppSettings["mqExchange"];
private static string routKeySingle = ConfigurationManager.AppSettings["routKeySingle"]; string modelJson = JsonConvert.SerializeObject(model);
MQMessage mqMsg = new MQMessage
{
Exchange = mqExchange,
RouteKey = routKeySingle,
Msg = modelJson
};
RabbitMqHelper.PublishMsg(mqMsg);
e.消费消息
string routKeySingle = ConfigurationManager.AppSettings["routKeySingle"];
Task task1 = Task.Factory.StartNew(() =>
{
RabbitMqHelper.ConsumeMsg(routKeySingle, (msg) => { imSingleInsertFun(msg); });
});
注释:消费消息是创建的windows服务不停的去跑,监听队列里的消息然后消费处理
Rabbitmq(三)的更多相关文章
- RabbitMQ(三):消息持久化策略
原文:RabbitMQ(三):消息持久化策略 一.前言 在正常的服务器运行过程中,时常会面临服务器宕机重启的情况,那么我们的消息此时会如何呢?很不幸的事情就是,我们的消息可能会消失,这肯定不是我们希望 ...
- 8、RabbitMQ三种Exchange模式(fanout,direct,topic)的性能比较
RabbitMQ三种Exchange模式(fanout,direct,topic)的性能比较 RabbitMQ中,除了Simple Queue和Work Queue之外的所有生产者提交的消息都由Exc ...
- 【转】RabbitMQ三种Exchange模式
[转]RabbitMQ三种Exchange模式 RabbitMQ中,所有生产者提交的消息都由Exchange来接受,然后Exchange按照特定的策略转发到Queue进行存储 RabbitMQ提供了四 ...
- RabbitMQ三种Exchange模式(fanout,direct,topic)的特性 -摘自网络
RabbitMQ中,所有生产者提交的消息都由Exchange来接受,然后Exchange按照特定的策略转发到Queue进行存储 RabbitMQ提供了四种Exchange:fanout,direct, ...
- 学习RabbitMQ(三):AMQP事务机制
本文转自:http://m.blog.csdn.net/article/details?id=54315940 在使用RabbitMQ的时候,我们可以通过消息持久化操作来解决因为服务器的异常奔溃导致的 ...
- RabbitMQ三种Exchange模式(fanout,direct,topic)的性能比较
RabbitMQ中,所有生产者提交的消息都由Exchange来接受,然后Exchange按照特定的策略转发到Queue进行存储 RabbitMQ提供了四种Exchange:fanout,direct, ...
- RabbitMQ三种Exchange模式(fanout,direct,topic)的性能比较(转)
RabbitMQ中,所有生产者提交的消息都由Exchange来接受,然后Exchange按照特定的策略转发到Queue进行存储 RabbitMQ提供了四种Exchange:fanout,direct, ...
- RabbitMQ三种Exchange模式
RabbitMQ中,所有生产者提交的消息都由Exchange来接受,然后Exchange按照特定的策略转发到Queue进行存储 RabbitMQ提供了四种Exchange:fanout,direct, ...
- [转]RabbitMQ三种Exchange模式(fanout,direct,topic)的性能比较
RabbitMQ中,所有生产者提交的消息都由Exchange来接受,然后Exchange按照特定的策略转发到Queue进行存储 RabbitMQ提供了四种Exchange:fanout,direct, ...
- 快速掌握RabbitMQ(三)——消息确认、持久化、优先级的C#实现
1 消息确认 在一些场合,如转账.付费时每一条消息都必须保证成功的被处理.AMQP是金融级的消息队列协议,有很高的可靠性,这里介绍在使用RabbitMQ时怎么保证消息被成功处理的.消息确认可以分为两种 ...
随机推荐
- 一次线上bug引起的反思
今天线上又出现了一个bug,而且代码是我写的.之前这个问题也出现过,不过由于每次情况都不同,改来改去总是改不完.之后领导知道后也很恼火,让测试把每种情况都测试了下,而我也又一次重新检查了下代码.当时确 ...
- Python3网络爬虫:urllib.error异常
转载请注明作者和出处:http://blog.csdn.net/c406495762/article/details/59488464 一.urllib.error urllib.error可以接收有 ...
- Python 爬虫 ajax爬取马云爸爸微博内容
ajax爬取情况 有时候我们在用 Requests 抓取页面的时候,得到的结果可能和在浏览器中看到的是不一样的,在浏览器中可以看到正常显示的页面数据,但是使用 Requests 得到的结果并没有,这其 ...
- 详解COM Add In的LoadBehavior及其妙用
Office的所有COM Add In,包括用Shared Add In模板和VSTO Add In模板创建的,都会在注册表里面存储一些信息. 对于当前用户安装的Add In,以Excel为例,对应 ...
- Python运算符和数据类型
一.Python的逻辑运算符 1.数字运算符: 运算符 描述 例子 + 加 - 两个对象相加 a + b 输出结果 30 - 减 - 得到负数或是一个数减去另一个数 a - b 输出结果 -10 * ...
- socket端口复用问题一二
实际上,默认的情况下,如果一个网络应用程序的一个套接字 绑定了一个端口( 占用了 8000 ),这时候,别的套接字就无法使用这个端口( 8000 ), 验证例子如下: #include <std ...
- jq实现简单的滑动解锁效果
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- canvas小球 时间demo
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- Java虚拟机9:垃圾收集(GC)-4(垃圾收集器)
1.前言 垃圾收集器是前一章垃圾收集算法理论知识的具体实现了,不同虚拟机所提供的垃圾收集器可能会有很大差别,另外我们必须提前说明一个道理:没有最好的垃圾收集器,更加没有万能的收集器,只能选择对具体应用 ...
- the longest distance of a binary tree
版权声明:欢迎查看本博客.希望对你有有所帮助 https://blog.csdn.net/cqs_2012/article/details/24880735 the longest distance ...