rabbitMQ 消息中间件

消息中间件

  RabbitMQ : 适合中小型项目,代码量较少

  ActiveMQ :apach旗下产品,并发处理不如rabbitMQ

  RocketMQ : 阿里旗下,同时支持消息中间件事务和数据库事务

  Kafka : 功能最弱

rabbitMQ安装

安装软件 Erlang -> rabbitmq

  配置环境变量

   新建 Erlang 环境变量: 变量名ERLANG_HOME , 变量值 -> erl文件目录路径

image-20210908174210400

   新建 rabbitmq 环境变量

image-20210908174844403

   配置 path : 新建两个变量 %ERLANG_HOME%\bin 和 %RABBITMQ_SERVER%\sbin。

image-20210908175029489

   开启 rabbitmq :win + R 键入命令: rabbitmq-server -detached

   关闭 rabbitmq :win + R 键入命令: rabbitmqctl stop

简介

  优点:

   销峰:限流,使流量数据变平稳

   解耦:降低程序耦合度

  缺点:

   系统开发复杂度提高

   中间环节多,容易在运行期间出错

死信

  不能被处理的消息

  避免传入多条相同数据造成死信,可以使用幂等对数据进行判断

   幂等:对同一个系统,使用同样的条件,一次请求和重复的多次请求对系统资源的影响是一致的

  解决方式:

   消息带上过期时间属性,如果超时就由服务器进行删除

springboot + rabbitmq

  添加 jar包

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-amqp</artifactId>
</dependency>

​  配置文件

spring:
  rabbitmq:
    host: 127.0.0.1
    port: 5672
    password: guest
    username: guest
    virtual-host: /

rabbitmq交换器

  消费者消费一个消息,被消费的消息在队列中在还存不存在:

​   被消费的消息会被服务器从队列中删除

   默认情况:只要消费者接受了消息,他马上就会删除消息

   确定消息被正确消费,只有正确证明了这个消息才能把消息从队列删除。

   采用手动确认的方式,数据不能丢失。自动确认模式可以丢失数据,性能更高

  如果服务器死了,没有被消费的消息在服务器重启后,还是否存在:

   spring封装,默认情况下,消息队列会持久化消息

direct(默认)直连交换机

  精确匹配路由键

  如果路由键匹配的话,消息就投递到相应的队列

topic 主题交换机

  可以进行模糊匹配路由键

  支持在路由键中使用通配符,# 匹配路由键中一个或多个词,* 匹配路由键的一个词

fanout 扇形交换机

posted @ 2021-09-10 16:51  YuanLiu  阅读(69)  评论(0)    收藏  举报