RabbitMq

什么是RabbitMq

  Rabbitmq是一个开源的

  实现了AMQP(高级消息队列协议)的一个消息中件间

周边

  Erlang,如 pyhon ruby  .net java c php actionscript等

工作流程图

  

消息队列中的核心概念

  1. 生产者(producer)发送消息的人(客户端程序)
  2. 消费者(consumer)接收的人
  3. 队列 (queue) 保存消息的容器
  4. 交换机|路由 (exchange)负责把消息正确的传递给队列

应用场景

  1. 程序流程异步化

    注册流程异步化

   2.应用程序解耦

    订单系统和库存系统的解耦

Rabbit mq安装配置

  Rabbitmq的运行环境通过虚拟机来解决

  1. 在windows系统中安装虚拟机vmware
  2. 在虚拟机里安装linux内核(centos7.0)的系统
  3. 在centos7.0 中安装erlang ,再安装rabbitmq

注:步骤2、3通过虚拟机镜像省略

主流虚拟机程序

  a) Oracle开源免费visual box(会有兼容问题)

  b) 商业收费的vmware

虚拟机的安装

  注:开启cpu虚拟化技术

  开启方法:修改主板设置bios

  1.打开虚拟机

  2.导入centos镜像

·

  1. 报错找不到网卡(解决方法修改为自己的网卡)

 使用注意事项

  1. 找不到鼠标

    按下右边的ctrl+alt

  2.Centos系统账户和密码

    a) 用户名: root (类似windows  Administrator)

    b) 密码:123456 (输入密码时不会显示)root、

 登录成功

虚拟机的网络设置

  1. 桥接模式 
  2. Nat模式

查看虚拟机系统中的ip地址

  虚拟机查看ip地址:ifconfig

  Windows查看ip地址:ipconfig

 

这个

 192.168.0.102

就是虚拟机的ip 地址

rabbitmq的后台管理界面

  访问地址:虚拟机ip地址:15672/#/

  账户:admin

  密码admin

Rabbitmq的使用

  实现发送一个 Hello world

实现步骤

  1. 通过javamain方法实现一个生产者

    a) 通过amqp依赖包提供的接口连接到rabbitmq服务

    b) 发送一条消息

  1. 通过main方法实现一个消息者

    a) 监听rabbitmq中的队列

    b) 当队列中有消息触发回调方法的执行

Springboot中使用amqp

    普通消息处理

  1. 注解创建一个队列
  2. 往队列推送消息
  3. 监听队列来完成消息的消费

  路由消息处理

  1. Direct模式(直达模式)
  2. Topic模式 (匹配模式,使用通配符来推送)
  3. Fanout模式(广播模式)

广播模式FanoutExchangefanout路由

 把消息发送给所有与广播路由绑定了的队列

  

 

直达路由(DirectExchange)

     Direct路由和队列进行捆绑的时候可以设置routing key

 发送消息时携带routingkeydirect路由把消息推送给指定队列(绑定了routingkey的队列)

举例

  日志打印的功能

  日志分类

  错误日志

  警告日志

  普通日志

实现

  1. 创建两个队列errorQueue otherQueue

 

主题路由(TopicExchange)(模糊匹配队列)

  匹配规则

  1.通配符 # *

    a) # 代表零个或多个词

    b) * 代表一个词

  1. 词和词使用.分隔

    举例

    1   *.orange.*

    2   *.*.rabbit

    3  Lazy.#

注:队列和路由绑定时可以包含通配符,发送消息时不能,会被认为是一个字符

  Quick.orange.rabbit 匹配12

  Lazy.brown.fox  匹配3

  Lazy.orange.elpephant 匹配13

  Quick.orange.fox   匹配1

  Lazy.pink.rabbit  匹配 23

注:路由绑定逻辑很复杂

应用场景

  1. 异步处理

    a) 注册流程的优化

  1. 应用解耦

    a) 订单系统和库存系统

  1. 流量削锋

    a) 秒杀系统

  1. 日志处理

    a) 把日志持久操作通过消息队列改成异步操作

  1. 消息通讯

    a) 通过消息发布和订阅,实现把消息推送给不同的客户端

实现注册的流程优化

  1. 用户提交注册表单
  2. 发送激活邮件的步骤改成异步操作
  3. 响应客户端

Java如何发送邮件

  1. 第三方提供服务
  2. 通过SMTP协议发送邮件(163邮箱)
  3. 自己搭建邮箱系统
posted @ 2019-09-26 19:14  changlinlo  阅读(984)  评论(0编辑  收藏  举报