rabbitmq学习笔记

 

正文

RabbitMQ

简介

简介

2006年,AMQP规范发布。
2007年,Rabbit技术公司基于AMQP标准开发的RabbitMQ 1.0 发布
AMQP
AMQP,即Advanced Message Queuing Protocol,一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。
基于此协议的客户端与消息中间件可传递消息,并不受客户端/中间件同产品,不同的开发语言等条件的限制
工作模型

RabbitMQ采用Erlang语言开发。Erlang语言由Ericson设计,专门为开发concurrent和distribution系统的一种语言,在电信领域使用广泛

RabbitMQ优点

安装

  • Erlang
    • 先安装依赖
      yum install unixODBC unixODBC-devel -y
      yum -y install ncurses-devel
    • 下载解压,进入目录指定安装目录
      tar -xzvf otp_src_20.3.tar.gz
      cd otp_src_20.3
      ./configure --prefix=/usr/local/erlang
    • 安装
      make && make install
    • 添加环境变量(必须添加)
      vim /etc/profile
      在末尾加入以下内容:
      export PAHT=$PATH:/usr/local/erlang/bin

source /etc/profile

测试

  • RabbitMQ
    下载解压进入目录,启动插件
    cd sbin/

//启动web管理插件,可访问页面
./rabbitmq-plugins enable rabbitmq_management
启动,如果不成功,可以把 -detached去掉看看什么原因,这个是后台启动
./rabbitmq-server -detached
- 创建用户,访问页面

./rabbitmqctl add_user admin admin
设置权限
./rabbitmqctl set_user_tags admin administrator
浏览器就能访问了,默认端口是15672,所以还需要开放下端口:
firewall-cmd --zone=public --add-port=15672/tcp --permanent
firewall-cmd --reload
访问,guest在3.3.0之后是无法登陆的,需要创建新用户
可以在登录之后设置权限,权限设置后需要重启

入门

如果报连接超时异常,可能是依赖版本不对

  • org.springframework.boot spring-boot-starter-amqp 1.5.10.RELEASE
  • 我之前用的springboot是2.0.6版本的,一直报连接超时,改成1.5.10版本就可以了
  • 或者把rabbitmq升级到3.7.9版本也不报错

java原生API版hello world

  • 生产者

  • 消费者

springboot整合版helloworld

  • 添加依赖

    org.springframework.boot spring-boot-starter-amqp
  • 配置

    queue需要先配置好,不然消费者使用的时候启动时候会报错

  • 连接用户需要授权,或者使用guest

  • 实际测试中开始会报连接超时异常,但是之后会自动连接成功

  • 发送接受消息

    • 生产者

    • 消费者

相关概念

  • Exchange(交换器)

    生产者将消息发送到交换机上,由交换机路由到一个或多个队列中,如果路由不到,或者返回给生产者或者被丢弃

  • RoutingKey(路由键)

  • Binding(绑定)

    通过绑定将交换机与队列关联起来,绑定时候一般会指定一个BindindKey

交换器类型

  • fanout : 扇形交换机,转发消息到所有绑定队列

  • direct : 直连交换机,转发消息到routigKey指定的队列

  • topic:主题交换机,按规则转发消息(最灵活)

    *可以匹配一个标识符。

可以匹配0个或多个标识符

  • headers : 首部交换机

    • headers类型的交换机分发消息不依赖routingKey,是使用发送消息时basicProperties对象中的headers来匹配的。
      headers是一个键值对类型,发送者发送消息时将这些键值对放到basicProperties对象中的headers字段中,队列绑定交换机时绑定一些键值对,当两者匹配时,队列就可以收到消息
    • 不推荐使用,性能差

客户端开发

原生API

  • exchangeDeclare

  • queueDeclare

  • queueBind

  • exchangeBind


  • 发送消息

  • 消费消息

    • push


    • pull

  • 消息确认机制

  • 消费端拒绝消息


  • 消息重入队列

springboot

  • 提前配置bean和yml,使用template即可
  • 后面笔记都会采用springboot方式开发,可参考,不会再用原生API

进阶

坑: 如果之前设置交互器和队列错了,之后修改代码后先删除之前的交互器和队列,否则没有用也不报错

mandatory参数



可直接在配置文件设置
配置中已经绑定这里可以直接使用

备份交换器

可在创建交换器时指定备份交换器存储未路由的消息,就不用mandatory参数了,如果设置了,备份优先
测试消息会进入备份交换器

过期时间

  • 消息

    • 队列设置(所有消息过期时间相同)

    • 消息设置,单条消息有各自的过期时间

    可设置属性可以参考客户端开发中原生API

  • 队列

    此时间是指过期时间内没有使用会被删除,使用了之后重新开始计算,不能为0

死信队列


配置死信队列:

  • 消息过期之后会自动到死信队列中

延迟队列

rabbitmq本身没有支持,但是可以使用过期和死信实现延迟
消费者订阅死信队列即可消费延迟后的消息,即生产者生产消息过期之后进入死信被消费,即延迟

优先级队列

先配置好队列,然后发送消息让消息堆积
之后再进行消费


队列之间没有优先级,同一个队列中优先级高的优先消费,这里是因为我定义队列Bean的时候没有加后面的map,实际应该是54321消费

RPC实现(远程调用)

  • 客户端发送消息时设置回调队列与标识

  • 远程服务端监听到消息处理结果推送到回调队列中

  • 客户端通过标识匹配拿到结果

    • 监听回调队列,匹配结果

生产者确认

可确认消息是否成功发送到rabbitmq中

消费端注意点

  • 开启手动确认

  • 确认或者拒绝消息

  • 消息分发

springboot中直接配置

管理

vhost(虚拟主机)




  • 获取当前vhost相关信息, /是默认的那个

权限


  • 查询权限

用户




  • 设置角色

Web端 (management插件)

  • 查看当前插件信息

    • ./rabbitmq-plugins list
    • E* 开头的为显式启动 e*开头为隐式启动
  • web端管理页面

    • 可视化操作命令能做的一切
  • 开启与关闭插件

    • ./rabbitmq-plugins enable rabbitmq_management

应用

  • rabbitmqctl shutdown
  • rabbitmqctl stop _ app

集群

服务端状态

API接口

配置

运维

集群

高阶

网络分区

扩展

posted @   侯小厨  阅读(27)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
Fork me on Gitee
点击右上角即可分享
微信分享提示