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(三)的更多相关文章

  1. RabbitMQ(三):消息持久化策略

    原文:RabbitMQ(三):消息持久化策略 一.前言 在正常的服务器运行过程中,时常会面临服务器宕机重启的情况,那么我们的消息此时会如何呢?很不幸的事情就是,我们的消息可能会消失,这肯定不是我们希望 ...

  2. 8、RabbitMQ三种Exchange模式(fanout,direct,topic)的性能比较

    RabbitMQ三种Exchange模式(fanout,direct,topic)的性能比较 RabbitMQ中,除了Simple Queue和Work Queue之外的所有生产者提交的消息都由Exc ...

  3. 【转】RabbitMQ三种Exchange模式

    [转]RabbitMQ三种Exchange模式 RabbitMQ中,所有生产者提交的消息都由Exchange来接受,然后Exchange按照特定的策略转发到Queue进行存储 RabbitMQ提供了四 ...

  4. RabbitMQ三种Exchange模式(fanout,direct,topic)的特性 -摘自网络

    RabbitMQ中,所有生产者提交的消息都由Exchange来接受,然后Exchange按照特定的策略转发到Queue进行存储 RabbitMQ提供了四种Exchange:fanout,direct, ...

  5. 学习RabbitMQ(三):AMQP事务机制

    本文转自:http://m.blog.csdn.net/article/details?id=54315940 在使用RabbitMQ的时候,我们可以通过消息持久化操作来解决因为服务器的异常奔溃导致的 ...

  6. RabbitMQ三种Exchange模式(fanout,direct,topic)的性能比较

    RabbitMQ中,所有生产者提交的消息都由Exchange来接受,然后Exchange按照特定的策略转发到Queue进行存储 RabbitMQ提供了四种Exchange:fanout,direct, ...

  7. RabbitMQ三种Exchange模式(fanout,direct,topic)的性能比较(转)

    RabbitMQ中,所有生产者提交的消息都由Exchange来接受,然后Exchange按照特定的策略转发到Queue进行存储 RabbitMQ提供了四种Exchange:fanout,direct, ...

  8. RabbitMQ三种Exchange模式

    RabbitMQ中,所有生产者提交的消息都由Exchange来接受,然后Exchange按照特定的策略转发到Queue进行存储 RabbitMQ提供了四种Exchange:fanout,direct, ...

  9. [转]RabbitMQ三种Exchange模式(fanout,direct,topic)的性能比较

    RabbitMQ中,所有生产者提交的消息都由Exchange来接受,然后Exchange按照特定的策略转发到Queue进行存储 RabbitMQ提供了四种Exchange:fanout,direct, ...

  10. 快速掌握RabbitMQ(三)——消息确认、持久化、优先级的C#实现

    1 消息确认 在一些场合,如转账.付费时每一条消息都必须保证成功的被处理.AMQP是金融级的消息队列协议,有很高的可靠性,这里介绍在使用RabbitMQ时怎么保证消息被成功处理的.消息确认可以分为两种 ...

随机推荐

  1. maven(12),排除冲突JAR包

     JAR包冲突 <dependencies> <dependency> <groupId>org.springframework</groupId> ...

  2. MySQL 8.0复制性能的提升(翻译)

    What’s New With MySQL Replication in MySQL 8.0 MySQL复制从问世到现在已经经历了多个年头,它的稳定性和可靠性也在稳步的提高.这是一个不停进化的过程,由 ...

  3. 存储过程存储过程需要用两个'',先where再Group,再Order by

    存储过程需要用两个'',先where再Group,再Order by  未完,待续

  4. 模块复习 staticmethod和classmethod的区别

    Python中classmethod与staticmethod区别 classmethod:类方法staticmethod:静态方法 在python中,静态方法和类方法都是可以通过类对象和类对象实例访 ...

  5. iso、ios、osi的区别

    ISO  国际标准化组织(International Organization for Standardization)简称ISO,是一个全球性的非政府组织,是国际标准化领域中一个十分重要的组织.IS ...

  6. strncpy()函数【转】

    C/C++中的strncpy()函数功能为将第source串的前n个字符拷贝到destination串,原型为: char * strncpy ( char * destination, const ...

  7. TCP/IP 协议图

  8. [DP]硬币问题

    今天再写一下硬币问题 为什么是再呢 这是个很羞耻的话题 昨天写了一遍硬币 在某谷上跑 没错 挂掉了 TLE MD_SB ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ...

  9. ubuntu 14.04 配置 java 环境

    下载java包 (这里以java8为例) java包的下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloa ...

  10. C++课堂作业(1)

    github链接: https://github.com/deepYY/object-oriented/tree/master/Circle 作业题目 Create a program that as ...