rabbitmq
2022-02-22 17:45:00 0 举报
AI智能生成
rabbitmq
作者其他创作
大纲/内容
rabbitmq
① 基本概念
Broker
Virtual Host
Connection
Channel
Exchange
Queue
Binding
6种工作模式
简单模式
work queues
短信通知服务
publish/subscribe
天气预报
routing路由模式
topics主题模式
RPC远程调用模式
消息确定机制
Confirm
ack
代表Broker已经将数据接收
nack
代表Broker拒收消息(队列已满,限流,IO异常,,,)
Return
代表Broker正常接收,但是没有对应的队列投递,消息会退回给生产者
官方地址
http://www.rabbitmq.com/
② 安装
上传软件
erlang18.31.el7.centos.x86_64.rpm
socat1.7.3.25.el7.lux.x86_64.rpm
rabbitmqserver3.6.51.noarch.rpm
安装erlang,rabbitmq
rpm -ivh erlang-18.3-1.el7.centos.x86_64.rpm
rpm -ivh socat-1.7.3.2-1.1.el7.x86_64.rpm
rpm -ivh rabbitmq-server-3.6.5-1.noarch.rpm
开启管理界面和配置
开启管理界面
rabbitmq-plugins enable rabbitmq_management
修改默认配置
vim /usr/lib/rabbitmq/lib/rabbitmq_server-3.6.5/ebin/rabbit.app
访问地址
http://ip:15672
配置虚拟主机和用户
用户角色
超级管理员administrator
监控者monitoring
策略制定者policymaker
普通管理者managerment
其他
Virtual Hosts配置
启动
启动服务
service rabbitmq-server start
停止服务
service rabbitmq-server stop
重启服务
service rabbitmq-server restart
设置配置文件
集群搭建
③ 高级特性
消息可靠性投递
confirm 确认模式
return 退回模式
总结
设置ConnectionFactory的publisher-confirms="true" 开启 确认模式
使用rabbitTemplate.setConfirmCallback设置回调函数。当消息发送到exchange后回调confirm方法。在方法中判断ack,如果为true,则发送成功,如果为false,则发送失败,需要处理
设置ConnectionFactory的publisher-returns="true" 开启 退回模式
使用rabbitTemplate.setReturnCallback设置退回函数,当消息从exchange路由到queue失败后,如果设置了rabbitTemplate.setMandatory(true)参数,则会将消息退回给producer。并执行回调函数returnedMessage
Consumer Ack
自动确认:acknowleage="none"
手动确认:acknowledge=“manual”
根据异常情况确认:acknowledge=“auto”
总结
在rabbit:listener-container标签中设置acknowledge属性,设置ack方式 none:自动确认,manual:手动确认
如果在消费端没有出现异常,则调用channel.basicAck(deliveryTag,false);方法确认签收消息
如果出现异常,则在catch中调用 basicNack或 basicReject,拒绝消息,让MQ重新发送消息
消费端限流
在<rabbit:listener-container> 中配置 prefetch属性设置消费端一次拉取多少消息
消费端的确认模式一定为手动确认。acknowledge="manual"
TTL(Time To Live)
设置消息过期时间
expiration 单位毫秒
当该消息在队列头部时(消费时),会单独判断这一消息是否过期
设置队列过期时间
x-message-ttl 单位毫秒
死信队列
消息成为死信的情况
队列消息长度达到限制
消费者拒接消费消息,basicNack/basicReject,并且不把消息重新放入原目标队列,requeue=false;
原队列存在消息过期设置,消息到达超时时间未被消费
队列绑定私信交换机
x-dead-letter-exchange
x-dead-letter-routing-key
延迟队列(rabbitmq没有实现延迟队列效果)
TTL+死信队列 实现延迟队列效果
幂等性保证
乐观锁机制
继承springboot
生产端直接注入RabbitTemplate
消费端直接使用@RabbitListener
0 条评论
下一页