Day1

学习内容

  1. RabbitMQ原理及特性,包括不同类型的exchange,queue的参数意义及性能影响等
  2. 使用Locust进行压测
  3. 了解“领域驱动设计”这种模式及其战略模式

已有知识

  1. 在本地上通过“restful风格的CRUD接口设计”项目在使用 map 存储引擎时使用rabbitmq进行主从同步,但只用到了简单的simple模式
  2. 学习了ab 与wrk进行压测,但ab在测试时在windows只能get 在linux上只能get put post 但不能delete,wrk在双系统上均可get post put delete

Day1

  1. 先在本地安装并部署好rabbitmq ,设置test账号以及分配管理员权限

使用rabbitmqctl控制台命令(位于C:\Program Files\RabbitMQ Server\rabbitmq_server-3.6.5\sbin>)来创建用户,密码,绑定权限等。

查看已有用户及用户的角色:

rabbitmqctl.bat list_users
在这里插入图片描述

新增一个用户:

rabbitmqctl.bat add_user username password
在这里插入图片描述

在这里插入图片描述
eric 后面没有“[administrator]”

  • (1) 超级管理员(administrator)

可登陆管理控制台(启用management plugin的情况下),可查看所有的信息,并且可以对用户,策略(policy)进行操作。

  • (2) 监控者(monitoring)

可登陆管理控制台(启用management plugin的情况下),同时可以查看rabbitmq节点的相关信息(进程数,内存使用情况,磁盘使用情况等)

  • (3) 策略制定者(policymaker)

可登陆管理控制台(启用management plugin的情况下), 同时可以对policy进行管理。

  • (4) 普通管理者(management)

仅可登陆管理控制台(启用management plugin的情况下),无法看到节点信息,也无法对策略进行管理。

  • (5) 其他的

无法登陆管理控制台,通常就是普通的生产者和消费者。

我们给 eric 变成 “超级管理员” 角色:

rabbitmqctl.bat set_user_tags username administrator
在这里插入图片描述
结果:

结果在这里插入图片描述
1.1 部署rabbitmq出现的问题

  • erlang与rabbitmq版本不匹配(最好别用最新!!)
    https://www.cnblogs.com/vaiyanzi/p/9531607.html 解决方案
    找到对应的版本 卸载干净 重新弄
  1. rabbitmq原理以及特性 具体作用 与其他消息队列的区别以及特点(先说场景再说原理)
  • rabbitmq的具体场景
    • 异步处理:用户注册后,需要发短信跟邮件,短信跟邮件其实则需要你确认送达后才能继续,只是传递一个消息让你知道一下,
      (1)传统方式:将注册信息写入数据库后,发送注册短信,要等短信确认才返回给客户端。 这里的相应时间就是50➕50=100 ,两者其中一个环节崩了都导致无法响应
A B C 注册信息写入数据库,需要50ms 发送短信 需要50ms 响应时间 100ms A B C
   (2)消息队列:将注册信息写入数据库后,把发送短信跟邮件直接交给消息队列处理,无论以后短信跟游戏耗时多少 是否崩了,都对你后面的流程无影响 所以这里的时间是50+5=50ms
A B C D 注册消息写入数据库 需要50ms 消息推给消息队列 仅需5ms 消息队列负责发短信与发邮件 需要50ms A B C D
  - 应用解耦
  场景:双11是购物狂节,用户下单后,订单系统需要通知库存系统,传统的做法就是订单系统调用库存系统的接口.   这种做法有一个缺点:

在这里插入图片描述
订单系统和库存系统高耦合. 引入消息队列
在这里插入图片描述
订单系统:用户下单后,订单系统完成持久化处理,将消息写入消息队列,返回用户订单下单成功。

库存系统:订阅下单的消息,获取下单消息,进行库操作。 就算库存系统出现故障,消息队列也能保证消息的可靠投递,不会导致消息丢失
- 流量削峰 (重要)
在这里插入图片描述
秒杀活动,一般会因为流量过大,导致应用挂掉,为了解决这个问题,一般在应用前端加入消息队列。
作用: 1.可以控制活动人数,超过此一定阀值的订单直接丢弃
2.可以缓解短时间的高流量压垮应用(应用程序按自己的最大处理能力获取订单) 1.用户的请求,服务器收到之后,首先写入消息队列,加入消息队列长度超过最大值,则直接抛弃用户请求或跳转到错误页面.

  1. RabbitMQ的结构图(在simple模式中具体分析)

在这里插入图片描述

几个概念说明:

Broker:简单来说就是消息队列服务器实体。
Exchange:消息交换机,它指定消息按什么规则,路由到哪个队列。
Queue:消息队列载体,每个消息都会被投入到一个或多个队列。
Binding:绑定,它的作用就是把exchange和queue按照路由规则绑定起来。
Routing Key:路由关键字,exchange根据这个关键字进行消息投递。
vhost:虚拟主机,一个broker里可以开设多个vhost,用作不同用户的权限分离。
Producer:消息生产者,就是投递消息的程序。
Consumer:消息消费者,就是接受消息的程序。
Channel:消息通道,在客户端的每个连接里,可建立多个channel,每个channel代表一个会话任务。
消息队列的使用过程大概如下:

  • 客户端连接到消息队列服务器,打开一个channel。
  • 客户端声明一个exchange,并设置相关属性。
  • 客户端声明一个queue,并设置相关属性。
  • 客户端使用routing key,在exchange和queue之间建立好绑定关系。
  • 客户端投递消息到exchange。
  • exchange接收到消息后,就根据消息的key和已经设置的binding,进行消息路由,将消息投递到一个或多个队列里
  1. 不同类型exchange
  2. 不同类型queue
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值