RabbitMQ简介和基本配置使用

1 RabbitMQ 简介

1.1 介绍

  RabbitMQ 是一个由 erlang 开发的基于 AMQP(Advanced Message Queue)协议的开源实现。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面都非常的优秀,是当前最主流的消息中间件之一。RabbitMQ 官网:http://www.rabbitmq.com

1.2 AMQP

  AMQP 是应用层协议的一个开放标准,为面向消息的中间件设计。消息中间件主要用于组件之间的解耦,消息的发送者无需知道消息使用者的存在,同样,消息使用者也不用知道发送者的存在。AMQP 的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全。

1.3 系统架构

消息队列的使用过程大概如下:

  • 客户端连接到消息队列服务器,打开一个 channel;
  • 客户端声明一个 exchange,并设置相关属性;
  • 客户端声明一个 queue,并设置相关属性;
  • 客户端使用 routing key,在 exchange 和 queue 之间建立好绑定关系;
  • 客户端投递消息到 exchange,exchange 接收到消息后,就根据消息的 key 和已经设置的 binding,进行消息路由,将消息投递到一个或多个队列里。

如上图所示:AMQP 里主要说两个组件,Exchange 和 Queue。绿色的X就是 Exchange ,红色的是 Queue ,这两者都在 Server 端,又称作 Broker,这部分是 RabbitMQ 实现的,而蓝色的则是客户端,通常有 Producer 和 Consumer 两种类型。

1.4 几个概念

  • P: 为 Producer,数据的发送方;
  • C:为 Consumer,数据的接收方;
  • Exchange:消息交换机,它指定消息按什么规则,路由到哪个队列;
  • Queue:消息队列载体,每个消息都会被投入到一个或多个队列;
  • Binding:绑定,它的作用就是把 exchange 和 queue 按照路由规则绑定起来;
  • Routing Key:路由关键字,exchange 根据这个关键字进行消息投递;
  • vhost:虚拟主机,一个 broker 里可以开设多个 vhost,用作不同用户的权限分离;
  • channel:消息通道,在客户端的每个连接里,可建立多个 channel,每个 channel 代表一个会话任务。

2 RabbitMQ 安装与配置

2.1 安装

RabbitMQ 是建立在强大的 Erlang OTP 平台上,因此安装 RabbitMQ 之前要先安装 Erlang.

2.2 配置

(1)安装完以后 erlang 需要手动设置ERLANG_HOME的系统变量。

输入:

set ERLANG_HOME=C:\Program Files\erl8.0

(2)激活 RabbitMQ’s Management Plugin

使用 Rabbit MQ 管理插件,可以更好的可视化方式查看 Rabbit MQ 服务器实例的状态,咱们可以在命令行中使用下面的命令激活。

输入

rabbitmq-plugins.bat enable rabbitmq_management

同时,也使用 rabbitmqctl 控制台命令(位于 rabbitmq_server-3.6.3\sbin>)来创建用户、密码、绑定权限等。

(3)创建管理用户

输入:

rabbitmqctl.bat add_user bdyh bdyh@2017

(4)设置管理员

输入:

rabbitmqctl.bat set_user_tags bdyh administrator

(5)设置权限

输入:

rabbitmqctl.bat set_permissions -p / bdyh ".*" ".*" ".*"

(6)其它命令

  • 查询用户: rabbitmqctl.bat list_users
  • 查询 vhosts: rabbitmqctl.bat list_vhosts
  • 启动 RabbitMQ 服务: net stop RabbitMQ && net start RabbitMQ

以上这些,账号、vhost、权限、作用域等基本就设置完啦!

2.3 Rabbit MQ管理后台

使用浏览器打开http://localhost:15672 访问 RabbitMQ 的管理控制台,使用刚才创建的账号登陆系统即可。RabbitMQ 管理后台,可以更好的可视化方式查看 RabbitMQ 服务器实例的状态。

3 C# 如何使用 RabbitMQ

3.1 客户端

4 四种 Exchange 模式

  AMQP 协议中的核心思想就是:生产者和消费者隔离,生产者从不直接将消息发送给队列。生产者通常不知道是否一个消息会被发送到队列中,只是将消息发送到一个交换机。先由 Exchange 来接收,然后 Exchange 按照特定的策略转发到 Queue 进行存储。同理,消费者也是如此。Exchange 就类似于一个交换机,转发各个消息分发到相应的队列中。

  RabbitMQ 提供了四种 Exchange 模式:fanout、direct、topic、header.

4.1 Fanout Exchange

所有发送到 Fanout Exchange 的消息都会被转发到与该 Exchange 绑定(Binding)的所有 Queue 上。

Fanout Exchange 不需要处理 RouteKey,只需要简单的将队列绑定到 exchange 上,这样发送到 exchange 的消息都会被转发到与该交换机绑定的所有队列上。类似子网广播,每台子网内的主机都获得了一份复制的消息。

所以,Fanout Exchange 转发消息是最快的。

4.2 Direct Exchange

所有发送到 Direct Exchange 的消息被转发到 RouteKey 中指定的 Queue.

Direct 模式可以使用 RabbitMQ 自带的 Exchange:default Exchange ,因此不需要将 Exchange 进行任何绑定(binding)操作 。消息传递时,RouteKey 必须完全匹配,才会被队列接收,否则该消息会被抛弃。

4.3 Topic Exchange

所有发送到 Topic Exchange 的消息被转发到所有关心 RouteKey 中指定 Topic 的 Queue 上,Exchange 将 RouteKey 和某 Topic 进行模糊匹配。此时队列需要绑定一个 Topic,可以使用通配符进行模糊匹配,符号#匹配一个或多个词,符号匹配不多不少一个词。因此log.#能够匹配到log.info.oa,但是log. 只会匹配到log.error.

所以,Topic Exchange 使用非常灵活。

猜你喜欢

转载自blog.csdn.net/dilemmavf/article/details/80505774