SpringBoot使用RabbitMQ看这几篇就够了(配置篇)!

各位看官可以关注博主个人博客,了解更多信息。
作者:Surpasser
链接地址:https://surpass.org.cn

前言

博主最近有一个任务需要用到消息队列RabbitMQ,那么今天我们就来看下在Windows本地下如何安装消息队列并使用SpringBoot结合消息队列做一个小的Demo。

正文

需要准备的东西(附链接地址)

RabbitMQ 是一个由 Erlang 语言开发的 AMQP 的开源实现。 所以需要Erlang语言环境(类似于jdk环境)。

这里注意下Erlang包要和rabbitmq包的版本应该对应,这里使用固定版本举例。

什么是RabbitMQ

RabbitMQ 最初起源于金融系统,用于在分布式系统中存储转发消息,在易用性、扩展

性、高可用性等方面表现不俗。具体特点包括:

  1. 可靠性(Reliability)

    RabbitMQ 使用一些机制来保证可靠性,如持久化、传输确认、发布确认。

  2. 灵活的路由(Flexible Routing)

    在消息进入队列之前,通过 Exchange 来路由消息的。对于典型的路由功能,RabbitMQ

    已经提供了一些内置的 Exchange 来实现。针对更复杂的路由功能,可以将多个

    Exchange 绑定在一起,也通过插件机制实现自己的 Exchange 。

  3. 消息集群(Clustering)

    多个 RabbitMQ 服务器可以组成一个集群,形成一个逻辑 Broker 。

  4. 高可用(Highly Available Queues)

    队列可以在集群中的机器上进行镜像,使得在部分节点出问题的情况下队列仍然可用。

  5. 多种协议(Multi-protocol)

    RabbitMQ 支持多种消息队列协议,比如 STOMP、MQTT 等等。

  6. 多语言客户端(Many Clients)

    RabbitMQ 几乎支持所有常用语言,比如 Java、.NET、Ruby 等等。

  7. 管理界面(Management UI)

    RabbitMQ 提供了一个易用的用户界面,使得用户可以监控和管理消息 Broker 的许多方

    面。

  8. 跟踪机制(Tracing)

    如果消息异常,RabbitMQ 提供了消息跟踪机制,使用者可以找出发生了什么。

  9. 插件机制(Plugin System)

    RabbitMQ 提供了许多插件,来从多方面进行扩展,也可以编写自己的插件。

架构图与主要概念

架构图

image

主要概念

RabbitMQ Server: 也叫broker server,它是一种传输服务。 他的角色就是维护一条

从Producer到Consumer的路线,保证数据能够按照指定的方式进行传输。

Producer: 消息生产者,如图A、B、C,数据的发送方。消息生产者连接RabbitMQ服

务器然后将消息投递到Exchange。

Consumer:消息消费者,如图1、2、3,数据的接收方。消息消费者订阅队列,

RabbitMQ将Queue中的消息发送到消息消费者。

Exchange:生产者将消息发送到Exchange(交换器),由Exchange将消息路由到一个

或多个Queue中(或者丢弃)。Exchange并不存储消息。RabbitMQ中的Exchange有

direct、fanout、topic、headers四种类型,每种类型对应不同的路由规则。

Queue:(队列)是RabbitMQ的内部对象,用于存储消息。消息消费者就是通过订阅

队列来获取消息的,RabbitMQ中的消息都只能存储在Queue中,生产者生产消息并最终

投递到Queue中,消费者可以从Queue中获取消息并消费。多个消费者可以订阅同一个

Queue,这时Queue中的消息会被平均分摊给多个消费者进行处理,而不是每个消费者

都收到所有的消息并处理。

RoutingKey:生产者在将消息发送给Exchange的时候,一般会指定一个routing key,

来指定这个消息的路由规则,而这个routing key需要与Exchange Type及binding key联

合使用才能最终生效。在Exchange Type与binding key固定的情况下(在正常使用时一

般这些内容都是固定配置好的),我们的生产者就可以在发送消息给Exchange时,通过

指定routing key来决定消息流向哪里。RabbitMQ为routing key设定的长度限制为255

bytes。

Connection: (连接):Producer和Consumer都是通过TCP连接到RabbitMQ Server

的。以后我们可以看到,程序的起始处就是建立这个TCP连接。

Channels: (信道):它建立在上述的TCP连接中。数据流动都是在Channel中进行

的。也就是说,一般情况是程序起始建立TCP连接,第二步就是建立这个Channel。

VirtualHost:权限控制的基本单位,一个VirtualHost里面有若干Exchange和

MessageQueue,以及指定被哪些user使用

安装环境

安装

安装 otp_win64_22.1.exe(以管理员身份运行安装)

配置环境变量:ERLANG_HOME:C:\Program Files\erl10.5

安装rabbitmq-server-3.8.4.exe(以管理员身份运行安装)

配置环境变量:RABBITMQ_HOME:C:\Program Files\RabbitMQ Server\rabbitmq_server-3.8.4

<font color=red>注:博主这里全为默认路径,注意不要安装在包含中文和空格的目录下。</font>

配置Path变量

添加上述变量名***_HOME到Path

%RABBITMQ_HOME%\sbin,%ERLANG_HOME%\bin

配置

进入控制台管理员界面,进入rabbitMQ安装目录的sbin目录,输入命令

安装管理界面
rabbitmq‐plugins enable rabbitmq_management

重新启动服务

Rabbitmq-server

为了方便将RabbitMQ安装到Windows服务

rabbitmq-service install

之后就能在windows服务中看到

image-20200608105744734.png

浏览器访问url:http://127.0.0.1:15672 即可看到界面,使用账号Username:guest,Password:guest登录

<font color=red>注:RabbitMQ默认授权给系统管理员,应提前更换登录用户或将用户提升为管理员,否则无法启动。</font>

image
在这里插入图片描述

最上侧的导航以此是:概览、连接、信道、交换器、队列、用户管理

Docker环境下的安装

下载镜像:(此步省略)

docker pull rabbitmq:management 

创建容器,rabbitmq需要有映射以下端口: 5671,5672,4369,15671,15672,25672

docker run ‐di ‐‐name=rabbitmq ‐p 5671:5617 ‐p 5672:5672 ‐p 4369:4369 ‐p 15671:15671 ‐p 15672:15672 ‐p 25672:25672 rabbitmq:management

重启Docker镜像docker restart rabbitmq

访问Linux IP:15672

模式详解

直接模式(Direct)

将消息发给唯一一个节点时使用这种模式,这是最简单的一种形式。

image

任何发送到Direct Exchange的消息都会被转发到RouteKey中指定的Queue。

  1. 一般情况可以使用rabbitMQ自带的Exchange:”"(该Exchange的名字为空字符串,下文称其为default Exchange)。

  2. 这种模式下不需要将Exchange进行任何绑定(binding)操作

  3. 消息传递时需要一个“RouteKey”,可以简单的理解为要发送到的队列名字。

  4. 如果vhost中不存在RouteKey中指定的队列名,则该消息会被抛弃。

创建队列

image

分列模式

将消息一次发给多个队列时,需要使用这种模式。

image

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

Queue上。

  1. 可以理解为路由表的模式

  2. 这种模式不需要RouteKey

  3. 这种模式需要提前将Exchange与Queue进行绑定,一个Exchange可以绑定多个

    Queue,一个Queue可以同多个Exchange进行绑定。

  4. 如果接受到消息的Exchange没有与任何Queue绑定,则消息会被抛弃。

创建队列及绑定

image

主题模式

任何发送到Topic Exchange的消息都会被转发到所有关心RouteKey中指定话题的Queue 上。

image

此类交换器使得来自不同的源头的消息可以到达一个对列,其实说的更明白一点就是模 糊匹配的意思,例如:上图中红色对列的routekey为usa.#,#代表匹配任意字符,但是 要想消息能到达此对列,usa.必须匹配后面的#好可以随意.图中usa.news, usa.weather,都能找到红色队列,符号 # 匹配一个或多个词,符号 * 匹配不多不少一个 词。因此 usa.# 能够匹配到 usa.news.XXX ,但是 usa.* 只会匹配到 usa.XXX 。

<font color=red>注:交换器说到底是一个名称与队列绑定的列表。当消息发布到交换器时,实际上是由你所 连接的信道,将消息路由键同交换器上绑定的列表进行比较,最后路由消息。 任何发送到Topic Exchange的消息都会被转发到所有关心RouteKey中指定话题Queue上。</font>

  1. 这种模式较为复杂,简单来说,就是每个队列都有其关心的主题,所有的消息都带有一 个“标题”(RouteKey),Exchange会将消息转发到所有关注主题能与RouteKey模糊匹配的队列。

  2. 这种模式需要RouteKey,也许要提前绑定Exchange与Queue。

  3. 在进行绑定时,要提供一个该队列关心的主题,如“#.log.#”表示该队列关心所有涉及 log的消息(一个RouteKey为”MQ.log.error”的消息会被转发到该队列)。

  4. “#”表示0个或若干个关键字,“表示一个关键字。如“log.”能与“log.warn”匹配,无法 与“log.warn.timeout”匹配;但是“log.#”能与上述两者匹配。

  5. 同样,如果Exchange没有发现能够与RouteKey匹配的Queue,则会抛弃此消息。

创建队列及绑定

新建一个交换器,类型为to'pic

image

新建一个队列,queue.topic

image
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,033评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,725评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,473评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,846评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,848评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,691评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,053评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,700评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,856评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,676评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,787评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,430评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,034评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,990评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,218评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,174评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,526评论 2 343