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时怎么保证消息被成功处理的.消息确认可以分为两种 ...
随机推荐
- Vertical-Align: 关于inline,inline-block文本排版
inline, inline-block元素在同行元素的排版布局中非常有用,但是时常会出现一些莫名奇妙的问题.要解决这些问题,深刻理解inline,inline-block元素的特征有非常重要的意义. ...
- netstat 检测及监测网络连接
网站没有很多流量,可查带宽却跑了几十M? 这是什么情况呢? 如果是出现这种情况,不排除是被CC了的可能.那么如何确定是否真的被CC了,被CC又有什么对应政策呢? netstat -na ,用 ...
- winfrom 实现窗体圆角
在窗体中加入一下代码 #region 窗体圆角的实现 private void ComFrmBase_Resize(object sender, EventArgs e) { if (this.Win ...
- 解决WPF图片模糊最佳方法
对于图片显示模糊相信很多人都遇到过,其实,有些图片会因为垂直分辨率/水平分辨率不同而造成在WPF界面上显示出现模糊. WPF默认是96Dpi,但有些图片可能是72DPI甚至更低或更高,这样就会出现图片 ...
- ZT自老罗的博客 Android系统的智能指针(轻量级指针、强指针和弱指针)的实现原理分析
Android系统的智能指针(轻量级指针.强指针和弱指针)的实现原理分析 分类: Android 2011-09-23 00:59 31568人阅读 评论(42) 收藏 举报 androidclass ...
- 021.11 IO流 序列流
序列流:SequenceInputStream特点:流对象有序排列解决问题:将多个输入流合并成一个输入流,将多个源合并成一个源,对于多个源的操作会变简单. 构造函数参数就是输入流,一初始化就合并了多个 ...
- webpack和gulp
在没有使用任何自动化工具之前,如果用sass写了css, 用coffee写了js, 那么我们必须手动用相应的compiler去编译各自的文件,然后各自minify(js,css文件压缩并合并).这时如 ...
- Angular Reactive Form-响应式表单验证
内建验证规则 Angular中提供了一些內建的Validators,这些验证规则可以在Template-Driven或Reactive表单中使用. 目前 Angular 支持的内建 validator ...
- Linux环境编程之IPC进程间通信(五):Posix消息队列1
对于管道和FIFO来说.必须应该先有读取者存在.否则先有写入者是没有意义的. 而消息队列则不同,它是一个消息链表,有足够写权限的线程可往别的队列中放置消息,有足够读权限的线程可从队列中取走消息.每一个 ...
- 2016424王启元 Exp6信息搜集与漏洞扫描
一.原理与实践说明 1.实践内容 本实践的目标是掌握信息搜集的最基础技能.具体有: 1.各种搜索技巧的应用 2.DNS IP注册信息的查询 3.基本的扫描技术:主机发现.端口扫描.OS及服务版本探测. ...