RabbitMQ在C#中的使用

     RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现,官网地址:http://www.rabbitmq.com。RabbitMQ作为一个消息代理,主要负责接收、存储和转发消息,它提供了可靠的消息机制和灵活的消息路由,并支持消息集群和分布式部署,常用于应用解耦,耗时任务队列,流量削锋等场景。

    研究了一段时间,发现几篇C#版的很好的文章:

    1、捞月亮的猴子:https://www.cnblogs.com/wyy1234/category/1321800.html

    2、努力决定下限:https://www.cnblogs.com/refuge/category/1395422.html

   

   封装好的类库Demo:

  1、王清培: https://www.cnblogs.com/wangiqngpei557/p/4751124.html

           github地址:https://github.com/Plen-wang/rabbitmqclient

  2、陈珙:    https://github.com/SkyChenSky/Sikiro.Mq.Rabbit

    具体的内容不再重复,把测试中发现的一些问题或遇到的坑简单记录如下:

  1、安装RabbitMQ之前,要先安装Erlang,而且不同的RabbitMQ版本需要的Erlang版本不同,而且最好为二者都设置环境变量;

  2、通过对其BasicPublish方法的研究,发现其第一个参数是Exchange,第二个参数是routingKey,因此,一些资料上所说的基本消息模型与WORK消息模型,为第2个参数传递的都是队列名,即所谓“直接将消息发布到队列”,本质上属于使用匿名的Exchange将消息发送到指定队列(也就是说,对BasicPublish方法来说,如果Exchange为空字符串,则第2个参数的含义变成了队列名)。

  3、根据一些资料上所说,实际项目中,一般是手动在Web管理平台上完成Exchange与Queue的创建,并对它们进行绑定和设置BindingKey(绑定时的RoutingKey参数);

  4、如果要在发布时使用优先级,必须设置队列的x-max-priority属性;(资料上设置的都是10,其他值是否可以没有试)

  5、RabbitMQ中获取消息的模式有两种:(1)订阅模式(或者叫推模式),使用的是EventingBasicConsumer,有了消息自动接收,属于监听的范畴;(2)拉模式:使用的是BasicGet方法,由调用方决定什么时间读取消息(这种模式估计实际使用意义不大);

  6、为了保证消息的安全,避免消息丢失,RabbitMQ有一些安全机制。

    【1】首先,应该设置“持久化”,将消息持久化到数据库,有三个地方需要设置;

      (1)队列;(2)Exchange;(3)在发布消息的方法BasicPublish中的参数的Persistent设置为True或设置DeliveryMode为2;

        var properties = Context.SendChannel.CreateBasicProperties();

                       properties.DeliveryMode = 2; //表示持久化消息

                      //properties.Persistent = true;//持久化消息,与上一句功能相同  

    【2】发布确认:确保生产者将消息发送到Broker。有两种方式:tx事务机制(因为效率较低不推荐使用)与Confirm机制(推荐使用异步方式BasicAcks与BasicNacks,但是没有测试成功,不知道为什么没有触发);

    【3】消费确认:其实就是应答,消费时不要设置成自动应答,手动使用BasicAck方法应答即可。

    

    暂时写这么多吧,缺少实际使用经验,认识还不深。

 

https://www.cnblogs.com/wyy1234/p/10743567.html

原文地址:https://www.cnblogs.com/lgzslf/p/13231010.html