.Net 集成 RabbitMQ

1. 安装rabbitmq 运行环境 Erlang
   语言环境版本与rabbitmq 版本匹配,地址:https://www.rabbitmq.com/which-erlang.html
   使用版本:23.0.1 64位 下载地址: http://erlang.org/download/otp_win64_23.0.1.exe
   注意必须以管理员账户安装

2. 下载rabbtimq 安装installer包,版本:3.8.5 64位,地址:https://www.rabbitmq.com/install-windows.html#installer
    1. 安装路径只能包含ascii字符
    2. 管理员账户安装
    3. 手动copy share secret 文件,命令行工具用

3. 命令行管理工具 CLI Tools
CLI Tools 工具需要与rabbit 节点或者rabbit 节点间要通信,必须要有相同的share secret,即Erlang cookie,
此文件在rabbit 启动时生成,在window 上此文件的地址依赖于以下两个因素:
   1. 是否 HOMEDRIVE 和 HOMEPATH 环境变量已设置
   2. Erlang版本: 20.2以前版本 或者 20.2以后版本
       1)对于20.2之后版本
       如果同时设置了HOMEDRIVE and HOMEPATH 地址如下:
       %HOMEDRIVE%%HOMEPATH%\.erlang.cookie (usually C:\Users\%USERNAME%\.erlang.cookie for user %USERNAME%)

       如果没有设置HOMEDRIVE and HOMEPATH 环境变量,地址如下:
       %USERPROFILE%\.erlang.cookie (usually C:\Users\%USERNAME%\.erlang.cookie)

       对于安装成Rabbit window服务通常在这个下面,如果是window服务cookie 必须从C:\Windows\system32\config\systemprofile\.erlang.cookie 复制到CLI Tools 运行位置
       %USERPROFILE%\.erlang.cookie (usually C:\WINDOWS\system32\config\systemprofile)


      2)对于19.3到20.2 的版本
      如果同时设置了HOMEDRIVE and HOMEPATH 地址如下:
      %HOMEDRIVE%%HOMEPATH%\.erlang.cookie (usually C:\Users\%USERNAME%\.erlang.cookie for user %USERNAME%)

      如果没有设置HOMEDRIVE and HOMEPATH 环境变量,地址如下:
      %USERPROFILE%\.erlang.cookie (usually C:\Users\%USERNAME%\.erlang.cookie)

      对于安装成Rabbit window服务通常在这个下面,如果是window服务cookie 必须从C:\Windows\.erlang.cookie 复制到CLI Tools 运行位置
      %WINDIR%\.erlang.cookie (usually C:\Windows\.erlang.cookie)

4. rabbit 环境配置文件 rabbitmq-env-conf.bat,如果环境配置变化,对于安装成 服务的rabbit 需要重启才能生效
    对于配置环境变量 说明:https://www.rabbitmq.com/configure.html#customise-environment
    可配置cookie 位置

 

5. 开启management UI
    命令:rabbitmq-plugins enable rabbitmq_management 无需重启服务来激活
    地址:http://{node-hostname}:15672/.
    管理界面可做操作:

    Declare, list and delete exchanges, queues, bindings, users, virtual hosts and user permissions.
    Monitor queue length, message rates (globally and per queue, exchange or channel), resource usage of queue, node GC activity, data rates of client connections, and more.
    Monitor node resource use: sockets and file descriptors, memory usage breakdown, available disk space and bandwidth usage on inter-node communication links.
    Manage users (provided administrative permissions of the current user).
    Manage policies and runtime parameters (provided sufficient permissions of the current user).
    Export schema (vhosts, users, permissions, queues, exchanges, bindings, parameters, policies) and import it on node start. This can be used for recovery purposes or setup automation of new nodes and clusters.
    Force close client connections, purge queues.
    Send and receive messages (useful in development environments and for troubleshooting).

6. 安装client 命令 : Install-Package RabbitMQ.Client -Version 6.1.0
    地址:https://www.nuget.org/packages/RabbitMQ.Client/6.1.0

7. RabbitMQ从信息接收者角度可以看做三种模式,
    一对一,一对多(此一对多并不是发布订阅,而是每条信息只有一个接收者)和发布订阅。
    其中一对一是简单队列模式,在一对一中routingKey必须和 queueName一致
    一对多是Worker模式,
    而发布订阅包括发布订阅模式,路由模式和通配符模式,为什么说发布订阅模式包含三种模式呢,
    其实发布订阅,路由,通配符三种模式都是使用只是交换机(Exchange)类型不一致

8. 一对一
   在接收者代码中也有声明队列的方法,其实这句代码可以去掉,但是如果去掉的话接收者在程序启动时监听队列,
   而此时这个队列还未存在,所以会出异常,所以往往会在消费者中也添加一个声明队列方法

   work模式
   运行两个接收者,然后发送者发送了1-5这五个消息,第一个接收者接收的是奇数,而第二个接收者接收的是偶数,但是现在的worker存在这很大的问题,
    1.丢失数据:一旦其中一个宕机,那么另外接收者的无法接收原本这个接收者所要接收的数据
                解决:解决这个问题得方法就是改变其消息确认模式,在Rabbit中存在两种消息确认模式,
     自动确认:只要消息从队列获取,无论消费者获取到消息后是否成功消费,都认为是消息成功消费,也就是说上面第二个接收者其实已经消费了它所接收的数据
   手动确认:消费从队列中获取消息后,服务器会将该消息处于不可用状态,等待消费者反馈
   也就是说我们只要将消息确认模式改为手动即可,改为手动确认方式只需改两处,1.开启监听时将autoAck参数改为false,2.消息消费成功后返回确认

    2.无法实现能者多劳:如果其中的接收者接收的较慢,那么便会极大的浪费性能,所以需要实现接收快的多接收
               解决:能者多劳是建立在手动确认基础上,添加BasicQos方法即可,告诉Rabbit每次只能向消费者发送一条信息,再消费者未确认之前,不再向他发送信息

  exchange模式
  前面说过发布,路由,通配符这三种模式其实可以算为一种模式,区别仅仅是交互机类型不同.
  在这里出现了一个交换机的东西,发送者将消息发送发送到交换机,接收者创建各自的消息队列绑定到交换机
  注意:交换机本身并不存储数据,数据存储在消息队列中,所以如果向没有绑定消息队列的交换机中发送信息,那么信息将会丢失

 

posted @ 2020-08-11 17:26  这是个坑  阅读(382)  评论(0)    收藏  举报