RabbitMq
什么是RabbitMq
Rabbitmq是一个开源的
实现了AMQP(高级消息队列协议)的一个消息中件间
周边
Erlang,如 pyhon ruby .net java c php actionscript等
工作流程图
消息队列中的核心概念
- 生产者(producer)发送消息的人(客户端程序)
- 消费者(consumer)接收的人
- 队列 (queue) 保存消息的容器
- 交换机|路由 (exchange)负责把消息正确的传递给队列
应用场景
- 程序流程异步化
注册流程异步化
2.应用程序解耦
订单系统和库存系统的解耦
Rabbit mq安装配置
Rabbitmq的运行环境通过虚拟机来解决
- 在windows系统中安装虚拟机vmware
- 在虚拟机里安装linux内核(centos7.0)的系统
- 在centos7.0 中安装erlang ,再安装rabbitmq
注:步骤2、3通过虚拟机镜像省略
主流虚拟机程序
a) Oracle开源免费的visual box(会有兼容问题)
b) 商业收费的vmware
虚拟机的安装
注:开启cpu虚拟化技术
开启方法:修改主板设置bios
1.打开虚拟机
2.导入centos镜像
·
- 报错找不到网卡(解决方法修改为自己的网卡)
使用注意事项
- 找不到鼠标
按下右边的ctrl+alt键
2.Centos系统账户和密码
a) 用户名: root (类似windows Administrator)
b) 密码:123456 (输入密码时不会显示)root、
登录成功
虚拟机的网络设置
- 桥接模式
- Nat模式
查看虚拟机系统中的ip地址
虚拟机查看ip地址:ifconfig
Windows查看ip地址:ipconfig
这个
192.168.0.102
就是虚拟机的ip 地址
rabbitmq的后台管理界面
访问地址:虚拟机ip地址:15672/#/
账户:admin
密码:admin
Rabbitmq的使用
实现发送一个 Hello world
实现步骤
- 通过java的main方法实现一个生产者
a) 通过amqp依赖包提供的接口连接到rabbitmq服务
b) 发送一条消息
- 通过main方法实现一个消息者
a) 监听rabbitmq中的队列
b) 当队列中有消息触发回调方法的执行
Springboot中使用amqp
普通消息处理
- 注解创建一个队列
- 往队列推送消息
- 监听队列来完成消息的消费
路由消息处理
- Direct模式(直达模式)
- Topic模式 (匹配模式,使用通配符来推送)
- Fanout模式(广播模式)
广播模式FanoutExchange(fanout路由)
把消息发送给所有与广播路由绑定了的队列
直达路由(DirectExchange)
Direct路由和队列进行捆绑的时候可以设置routing key
发送消息时携带routingkey,direct路由把消息推送给指定队列(绑定了routingkey的队列)
举例
日志打印的功能
日志分类
错误日志
警告日志
普通日志
实现
- 创建两个队列errorQueue 和otherQueue
主题路由(TopicExchange)(模糊匹配队列)
匹配规则
1.通配符 # *
a) # 代表零个或多个词
b) * 代表一个词
- 词和词使用.分隔
举例
1 *.orange.*
2 *.*.rabbit
3 Lazy.#
注:队列和路由绑定时可以包含通配符,发送消息时不能,会被认为是一个字符
Quick.orange.rabbit 匹配1和2
Lazy.brown.fox 匹配3
Lazy.orange.elpephant 匹配1,3
Quick.orange.fox 匹配1
Lazy.pink.rabbit 匹配 2,3
注:路由绑定逻辑很复杂
应用场景
- 异步处理
a) 注册流程的优化
- 应用解耦
a) 订单系统和库存系统
- 流量削锋
a) 秒杀系统
- 日志处理
a) 把日志持久操作通过消息队列改成异步操作
- 消息通讯
a) 通过消息发布和订阅,实现把消息推送给不同的客户端
实现注册的流程优化
- 用户提交注册表单
- 把发送激活邮件的步骤改成异步操作
- 响应客户端
Java如何发送邮件
- 第三方提供服务
- 通过SMTP协议发送邮件(163邮箱)
- 自己搭建邮箱系统
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战