位置: IT常识 - 正文

RabbitMQ(rabbitmq如何解决消息堆积问题)

编辑:rootadmin
RabbitMQ 一、MQ 1.同步调用的优缺点 同步调用的优点: 时效性较强,可以立即得到结果 同步调用的问题: 耦合度高 性能和吞吐能力下降 有额外的资源消耗 有级联失败问题 2.异步调用 异步调用常见实现就是事件驱动模式 好处: 吞吐量提升:无需等待订阅者处理完成,响应更快速 故障隔离:服务没 ... RabbitMQ一、MQ1.同步调用的优缺点

推荐整理分享RabbitMQ(rabbitmq如何解决消息堆积问题),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:rabbitmq自动删除队列,rabbitmq五种消息模型,rabbitmq队列有几种,rabbitmq五种消息模型,rabbitmq如何保证消息不丢,rabbitmq五种消息模型,rabbitmq和kafka的区别,rabbitmq如何保证消息不丢,内容如对您有帮助,希望把文章链接给更多的朋友!

同步调用的优点:

时效性较强,可以立即得到结果

同步调用的问题:

耦合度高性能和吞吐能力下降有额外的资源消耗有级联失败问题2.异步调用

异步调用常见实现就是事件驱动模式

好处:

吞吐量提升:无需等待订阅者处理完成,响应更快速

故障隔离:服务没有直接调用,不存在级联失败问题

调用间没有阻塞,不会造成无效的资源占用

耦合度极低,每个服务都可以灵活插拔,可替换

流量削峰:不管发布事件的流量波动多大,都由Broker接收,订阅者可以按照自己的速度去处理事件

缺点:

架构复杂了,业务没有明显的流程线,不好管理需要依赖于Broker的可靠、安全、性能3.MQ实现

MQ,中文是消息队列(MessageQueue),字面来看就是存放消息的队列。也就是事件驱动架构中的Broker。

几种常见MQ的对比:

RabbitMQActiveMQRocketMQKafka公司/社区RabbitApache阿里Apache开发语言ErlangJavaJavaScala&Java协议支持AMQP,XMPP,SMTP,STOMPOpenWire,STOMP,REST,XMPP,AMQP自定义协议自定义协议可用性高一般高高单机吞吐量一般差高非常高消息延迟微秒级毫秒级毫秒级毫秒以内消息可靠性高一般高一般

追求可用性:Kafka、 RocketMQ 、RabbitMQ

追求可靠性:RabbitMQ、RocketMQ

追求吞吐能力:RocketMQ、Kafka

追求消息低延迟:RabbitMQ、Kafka

二、Linux安装RabbitMQ1.1.下载镜像

方式一:在线拉取

docker pull rabbitmq:3-managementRabbitMQ(rabbitmq如何解决消息堆积问题)

方式二:从本地加载

在课前资料已经提供了镜像包:

上传到虚拟机中后,使用命令加载镜像即可:

docker load -i mq.tar1.2.安装MQ

执行下面的命令来运行MQ容器:

docker run \ -e RABBITMQ_DEFAULT_USER=itcast \ -e RABBITMQ_DEFAULT_PASS=123321 \ --name mq \ --hostname mq1 \ -p 15672:15672 \ -p 5672:5672 \ -d \ rabbitmq:3-management

注意5672是MQ消息通信的端口,15672是ui端口

三、RabbitMQ1.种类

大致分为两种

1.**无交换机的 **基本消息队列 和 工作消息队列

2.有交换机的发布订阅,路由,主题

2.基于SpringAMQP使用2.1基础消息队列

先使用测试类生成队列

public class ConsumerTest { public static void main(String[] args) throws IOException, TimeoutException { // 1.建立连接 ConnectionFactory factory = new ConnectionFactory(); // 1.1.设置连接参数,分别是:主机名、端口号、vhost、用户名、密码 factory.setHost("116.62.32.68"); factory.setPort(5672); factory.setVirtualHost("/"); factory.setUsername("itcast"); factory.setPassword("123321"); // 1.2.建立连接 Connection connection = factory.newConnection(); // 2.创建通道Channel Channel channel = connection.createChannel(); // 3.创建队列 String queueName = "simple.queue"; channel.queueDeclare(queueName, false, false, false, null); // 4.订阅消息 channel.basicConsume(queueName, true, new DefaultConsumer(channel){ @Override public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException { // 5.处理消息 String message = new String(body); System.out.println("接收到消息:【" + message + "】"); } }); System.out.println("等待接收消息。。。。"); }}

引入依赖

<!--AMQP依赖,包含RabbitMQ--><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId></dependency>

生产者编写yaml文件的MQ地址,端口号,用户名密码

spring: rabbitmq: host: 192.168.150.101 # 主机名 port: 5672 # 端口 virtual-host: / # 虚拟主机 username: itcast # 用户名 password: 123321 # 密码

编写生产者代码

@RunWith(SpringRunner.class)@SpringBootTestpublic class SpringAmqpTest { //类似于redisTemplate @Autowired private RabbitTemplate rabbitTemplate; @Test public void testSimpleQueue(){ //队列名 String queueName = "simple.queue"; //消息 String message = "hello,SpringAmqp"; //发送消息到队列 rabbitTemplate.convertAndSend(queueName,message); }}

消费者编写yaml文件的MQ地址,端口号,用户名密码

同上

编写消费者代码

@Componentpublic class SpringRabbitListener { @RabbitListener(queues = "simple.queue") public void listenSimpleQueueMessage(String msg) throws InterruptedException { System.out.println("spring 消费者接收到消息:【" + msg + "】"); }}2.2工作消息队列

消费者:

//工作队列@RabbitListener(queues = "simple.queue")public void listenWorkQueue1Message(String msg) throws InterruptedException { System.out.println("spring 消费者1接收到消息:【" + msg + "】");}@RabbitListener(queues = "simple.queue")public void listenSimpleQueue2Message(String msg) throws InterruptedException { System.out.println("spring 消费者2接收到消息:【" + msg + "】");}logging: pattern: dateformat: MM-dd HH:mm:ss:SSSspring: rabbitmq: host: # 主机名 port: 5672 # 端口 virtual-host: / # 虚拟主机 username: itcast # 用户名 password: 123321 # 密码 listener: direct: prefetch: 1 # 消息预期,之前把所有消息预期导致平分消息,现在是处理一个取一个2.3广播Fanout

多了一个交换机,交换机决定将生产者的消息发送给哪个队列,这决定就是交换机种类不同规则不同,因此分为三种,广播、路由和主题。

广播:只要队列绑定了交换机,就发送消息到队列

1.编写消费者:使用注解

本文链接地址:https://www.jiuchutong.com/zhishi/310252.html 转载请保留说明!

上一篇:Qt4.7.4下单独编译QtWebkit(qt 5.15 编译)

下一篇:js中Promise的状态探究(js中promise的三种状态)

  • 怎么用小爱同学控制空调(怎么用小爱同学开电脑)

    怎么用小爱同学控制空调(怎么用小爱同学开电脑)

  • iphone照片镜像怎么反过来(iphone 照片镜像)

    iphone照片镜像怎么反过来(iphone 照片镜像)

  • 微信怎么取消做对方监护人(微信怎么能取消)

    微信怎么取消做对方监护人(微信怎么能取消)

  • 快手小店查不到订单怎么办(快手小店查不到物流信息怎么办)

    快手小店查不到订单怎么办(快手小店查不到物流信息怎么办)

  • 华为内部机是什么情况(华为内部机有什么不同)

    华为内部机是什么情况(华为内部机有什么不同)

  • 快手对方显示x作品是什么意思(快手对方显示用户设置不可见是什么意思)

    快手对方显示x作品是什么意思(快手对方显示用户设置不可见是什么意思)

  • windows7操作系统是一个什么操作系统(win7的操作系统)

    windows7操作系统是一个什么操作系统(win7的操作系统)

  • 为什么下载软件之后一直在安装不了(为什么下载软件下载不了)

    为什么下载软件之后一直在安装不了(为什么下载软件下载不了)

  • qq书架在哪里找(qq书架在哪里找出来)

    qq书架在哪里找(qq书架在哪里找出来)

  • 微信注册频繁多久解除(微信注册频繁多久能恢复)

    微信注册频繁多久解除(微信注册频繁多久能恢复)

  • 为什么mate20充电没有显示超级快充(华为mate20充电充不进去怎么办)

    为什么mate20充电没有显示超级快充(华为mate20充电充不进去怎么办)

  • ouboo什么牌的手机(ovou什么牌子)

    ouboo什么牌的手机(ovou什么牌子)

  • 企业微信和钉钉的区别(企业微信和钉钉打卡哪个好用)

    企业微信和钉钉的区别(企业微信和钉钉打卡哪个好用)

  • miui11是安卓几(miui 11.0.8是安卓几)

    miui11是安卓几(miui 11.0.8是安卓几)

  • 微信注销需要多久(微信注销需要多久才能成功)

    微信注销需要多久(微信注销需要多久才能成功)

  • 常见的鼠标器有几键(常见的鼠标器有哪几键)

    常见的鼠标器有几键(常见的鼠标器有哪几键)

  • word怎么把一页删掉(word怎么把一页变成两页)

    word怎么把一页删掉(word怎么把一页变成两页)

  • 苹果11处理器是几核(苹果11处理器是多少核)

    苹果11处理器是几核(苹果11处理器是多少核)

  • 红米note8怎么设置网速(红米note8怎么设置陌生号码禁止打入)

    红米note8怎么设置网速(红米note8怎么设置陌生号码禁止打入)

  • 华为杀进程怎么处理(emui杀进程)

    华为杀进程怎么处理(emui杀进程)

  • 手机座公交车怎么扫码(手机坐公交车怎么弄)

    手机座公交车怎么扫码(手机坐公交车怎么弄)

  • qq音乐未支付订单怎么取消(qq音乐支付了却显示订单取消)

    qq音乐未支付订单怎么取消(qq音乐支付了却显示订单取消)

  • 怎样用ps将照片改为5M(怎样用ps将照片背景换成白色的)

    怎样用ps将照片改为5M(怎样用ps将照片背景换成白色的)

  • vivo休眠在哪里设置(vivo手机的休眠在哪里)

    vivo休眠在哪里设置(vivo手机的休眠在哪里)

  • 电脑如何修改硬盘模式?计算机硬盘模式更改bios设置教程(电脑如何修改硬盘模式)

    电脑如何修改硬盘模式?计算机硬盘模式更改bios设置教程(电脑如何修改硬盘模式)

  • Web项目【用户管理系统】完整版(web用户管理系统报告)

    Web项目【用户管理系统】完整版(web用户管理系统报告)

  • Python脚本多种方法破解栅栏密码(python脚本例子)

    Python脚本多种方法破解栅栏密码(python脚本例子)

  • 合伙企业交企业所得税还是个人所得税
  • 价税分离的公式是什么呀
  • 发票的红冲和作废有何区别
  • 一般纳税人房租费的税率是多少
  • 会计账簿账目核对要求包括哪些
  • 12月了还没找到工作怎么办
  • 自然灾害造成库存商品毁损
  • 全年一次性奖金计税方式
  • 开具增值税专用发票承诺函
  • 奖金用现金发放违法吗
  • 给工会开发票企业需要报税吗?
  • 土建税率是多少
  • 银行直接扣的手续费怎么记账
  • 公司购买的矿泉水属于什么科目
  • 变更财务负责人在网上变更流程
  • 单位统一为员工办的银行卡属于对公账户吗
  • 税务代开劳务费税点如何确定
  • 汽车中介赚钱吗
  • 记账公司如何平衡收入成本费用?
  • 契税是不是土地出让金
  • c盘空间变小的原因
  • 客户收集软件
  • 应交增值税和实缴增值税差额怎么做账
  • php生成文件流
  • win11电脑怎么设置开机密码
  • 一般纳税人怎么交税
  • 工厂采购部门
  • 借股东现金会计分录
  • 估价入库金额怎么来
  • 出差午餐补助公职出差
  • FUXA个人学习总结(一)
  • php imagettftext()函数
  • 待处理财产损益会计分录
  • 小微企业免征增值税政策2023
  • 减免增值税附加税也一起减免吗
  • 动态内存管理
  • 企业预付账款怎么做账
  • 小规模纳税人可以开增值税专用发票吗
  • 股东出资不足需要赔偿吗
  • 进项转出了还能再转进去吗
  • MySQL中UPDATE与DELETE语句的使用教程
  • 销售熟食卤制品怎么做
  • 什么情况下增值税进项税额转出
  • 带薪年假一般是什么时候
  • 房地产企业销售房屋印花税税率
  • 折旧方法有哪些英文
  • 一般纳税人每月开票限额是多少
  • 技术服务收入包括哪些
  • 残保金怎么做账务处理
  • 库存现金存入银行是什么凭证
  • 银行回单nxt
  • 国外工程合同类型
  • 会议费报销管理办法
  • 财务负责人怎么实名认证
  • 发票打印机多少钱一套
  • 退税勾选选成抵扣勾选怎么办
  • 残疾人就业保障金上年职工工资总额
  • 建筑公司租赁费会计分录
  • sql1068错误
  • 阿里云 centos7 替换
  • sqlserver管理工具有哪些
  • windows server vista
  • 如何远程重装系统教程
  • 怎么测试windows摄像头
  • win7旗舰版64位系统无法进入安全模式怎么办?
  • linux常用命令useradd
  • win8怎样恢复系统
  • linux常见shell命令
  • Win10 Mobile Redstone预览版14291上手体验评测
  • unity shaderlab
  • 腙基是什么
  • pygame实例
  • unity-chan
  • node.jsexpress
  • 安卓仿平板
  • android 简历模板
  • 新土地管理法37条解释
  • 税控盘清卡的步骤
  • 2020年税务系统关闭
  • 社保交五百多
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设