RabbitMq系列:安装与基本概念

原创
2021/07/22 17:20
阅读数 35

RabbitMq系列:安装与基本概念

一、简介

   电商场景为例,如果商品服务和订单服务是两个不同的微服务,在下单的过程中订单服务需要调用商品服务
进行扣库存操作。
   传统的方式,下单过程要等到调用完毕之后才能返回下单成功,如果网络产生波动等原因使得商品服务扣库
存延迟或者失败,会带来较差的用户体验,如果在高并发的场景下,这样的处理显然是不合适的.
   消息队列提供一个异步通信机制,消息的发送者不必一直等待到消息被成功处理才返回,而是立即返回.
   消息中间件负责处理网络通信,如果网络连接不可用,消息被暂存于队列当中,当网络畅通的时候再将消息
转发给相应的应用程序或者服务,前提是这些服务订阅了该队列.
   如果在商品服务和订单服务之间使用消息中间件,既可以提高并发量,又降低服务之间的耦合度.

   RabbitMQ是基于AMQP协议使用Erlang语言来编写的开源的消息代理的队列服务器.

二、应用场景

异步处理:把消息放入消息中间件中,等到需要的时候再去处理。

流量削峰:例如秒杀活动,短时间内访问量急增,使用消息队列,当消息队列满了就拒绝响应,跳转到错误页面,这样就可以使得系统不会因为超负载而崩溃。

应用解耦:

三、重要概念

VHost : 每一个RabbitMQ服务器都能创建虚拟消息服务器,我们称之为虚拟主机。每一个vhost本质上是一个mini版的
    RabbitMQ服务器,拥有自己的交换机、队列、绑定等,拥有自己的权限机制。RabbitMQ提供了开箱即用的默认的虚拟主
    机“/”,如果不需要多个vhost可以直接使用这个默认的vhost,通过使用缺省的guest用户名和guest密码来访问默认的
    vhost。vhost之间是相互独立的,这避免了各种命名的冲突,就像App中的沙盒的概念一样,每个沙盒是相互独立的,且只
    能访问自己的沙盒,以保证非法访问别的沙盒带来的安全隐患。

Producer:消息的发布者,相当于淘宝卖家

Consumer:消息的接收者,相当于淘宝买家

Broker:可以看做一个RabbitMQ服务实例

Server:接收客户端的连接,实现AMQP实体服务

Connection:就是一个TCP的连接。Producer和Consumer都是通过TCP连接到RabbitMQ Server的。
            相当于卖家和快递公司建立合作协议;

Channel:信道,消息读写等操作在信道中进行。客户端可以建立多个信道,每个信道代表一个会话任务。它建
    立在上述的TCP连接中。建立和关闭TCP连接耗资源,影响性能,而且TCP的连接数也有限制,限制了系统处理高
    并发的能力。但是,在TCP连接中建立Channel是没有上述代价的。对于Producer或者Consumer来说,可以并发
    的使用多个Channel进行Publish或者Receive.

Message:消息,应用程序和服务器之间传送的数据,消息可以非常简单,也可以很复杂。由Properties和Body组成。
         Properties为外包装,可以对消息进行修饰,比如消息的优先级、延迟等高级特性;Body就是消息体内容。

Queue:消息队列,用于缓存消息,Consumer和Procuder都可以创建queue,队列的持久化也可以设置;相
    当于快递的集散中心,用来暂时存放快递;消费者从队列中取消息;相当于买家从集散中心取快递,多个买家可
    以从同一个集散中心取快递;相当于多个客户端从队列里取消息;一个客户端也可以创建多个通道从队列里取消
    息,相当于一个家庭的不同成员去取快递; 程序中就是开启多个线程,通过通道从队列中取消息,实现高并发

Exchange:交换器,接收消息,按照路由规则将消息路由到一个或者多个队列。如果路由不到,或者返回给生产
    者,或者直接丢弃。相当于快递公司,将接到的快递集散之后发给各个城市的集散中心;RabbitMQ常用的交换器
    常用类型有direct、topic、fanout、headers四种。定向模式Direct exchange,只有当routing key 匹配
    时, 消息才会被传递到相应的queue中;广播模式Fanout exchange, 会向所有绑定的队列发送消息;模糊匹配
    模式Topic exchange,routing key由通配符构成,对routing key进行模式匹配,比如ab*可以传递到所有
    ab*的queue。

RoutingKey:路由键,生产者将消息发送给交换器的时候,会发送一个RoutingKey,用来指定路由规则,这样
    交换器就知道把消息发送到哪个队列。用来连接Exchange和queue,路由键通常为一个“.”分割的字符串,例
    如“com.rabbitmq”。相当于快递中的地址,让快递公司知道将快递发给哪个集散中心;

Binding:绑定exchange和queue之间的虚拟连接,绑定中可以包含一个或者多个RoutingKey。

exchange交换机负责接收消息,决定将消息发送到哪个队列queue中
queue队列存储消息
consumer 1个客户端只会建立一条长连接,但是一个长连接包含多个信道Channel

一个exchange交换机可以绑定多个queue
一个queue队列可以由多个exchange交换机绑定

exchange交换机类型:direct直接  header fanout扇出  topic主题

direct exchange: 直接交给指定的队列 routing-key精准匹配
fanout exchange: 扇出,不关心routing-key,广播模式。exchange将消息发送给全部绑定的queue
topic exchange:  主题,关心routing-key,也是广播发送给多个queue,但是发送给特定的queue

四、安装

##采用Docker安装:

1、查看仓库rabbitmq镜像是否存在   management版本是带有控制台的,否则还要自己开启
docker search rabbitmq:management

2、下载镜像
docker pull rabbitmq:management

3、发布
docker run -d --name rabbit -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin123 -p 15672:15672 -p 5672:5672 -p 25672:25672 -p 61613:61613 -p 1883:1883 rabbitmq:management

##控制台的账号和密码,如果不设置的话,默认账号和密码是:guest guest
##账号:RABBITMQ_DEFAULT_USER=admin  
##密码:RABBITMQ_DEFAULT_PASS=admin123

##端口描述
##4369 erlang发现口
##5672 client端通信口
##15672 管理界面UI端口
##25672  server端内部通信口
##61613 STOMP插件启用
##1883/8883 当MQTT插件启用的时候打开
##15674 基于websocket的STOMP客户端端口
##15674 基于websocket的MQTT客户端端口

##如果没有management控制台,可以开启:
##docker ps 
##docker exec -it 镜像ID /bin/bash
##rabbitmq-plugins enable rabbitmq_management


4、访问管理系统界面,账号和密码为步骤3设置的admin admin123/没有设置的话默认是guest guest
http://服务器地址:15672

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
0 评论
0 收藏
0
分享
返回顶部
顶部