位置: 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的三种状态)

  • 荣耀30是双扬声器吗(荣耀30单扬声器还是双扬声器)

    荣耀30是双扬声器吗(荣耀30单扬声器还是双扬声器)

  • 网易云音乐怎么把歌词放到桌面(网易云音乐怎么下载到U盘)

    网易云音乐怎么把歌词放到桌面(网易云音乐怎么下载到U盘)

  • 钢化膜彩虹边的危害(钢化膜边缘彩虹伤眼吗)

    钢化膜彩虹边的危害(钢化膜边缘彩虹伤眼吗)

  • 摄像头mm代表什么(摄像头mm的区别)

    摄像头mm代表什么(摄像头mm的区别)

  • 无线传输介质有哪些(无线传输介质有哪些?特点是什么?)

    无线传输介质有哪些(无线传输介质有哪些?特点是什么?)

  • 华为p40下巴多少毫米(华为p40下巴宽度)

    华为p40下巴多少毫米(华为p40下巴宽度)

  • 墨盒清零怎么操作(墨盒清零怎么操作ts3380)

    墨盒清零怎么操作(墨盒清零怎么操作ts3380)

  • 罗马仕充电宝充不进去电灯一直闪(罗马仕充电宝充满电需要多久?)

    罗马仕充电宝充不进去电灯一直闪(罗马仕充电宝充满电需要多久?)

  • 苹果7p是什么时候上市的(苹果7p是什么时候上市的手机)

    苹果7p是什么时候上市的(苹果7p是什么时候上市的手机)

  • c语言中fac是什么意思(c语言中fa是什么意思)

    c语言中fac是什么意思(c语言中fa是什么意思)

  • 全家福可以送好友吗(全家福能送人么)

    全家福可以送好友吗(全家福能送人么)

  • 如何将b站视频下至本地(如何将b站视频弄到PPT里)

    如何将b站视频下至本地(如何将b站视频弄到PPT里)

  • 抖音文案怎么写吸引人(中考结束抖音文案怎么写)

    抖音文案怎么写吸引人(中考结束抖音文案怎么写)

  • 三星tf卡红卡和橙卡的区别是什么(三星tf卡红卡和橙卡哪个好)

    三星tf卡红卡和橙卡的区别是什么(三星tf卡红卡和橙卡哪个好)

  • 荣耀手环5怎么使用(荣耀手环5怎么重启)

    荣耀手环5怎么使用(荣耀手环5怎么重启)

  • 采用虚拟存储的目的是(虚拟存储的特征)

    采用虚拟存储的目的是(虚拟存储的特征)

  • 双向无线充电是什么意思(无线充电双圈好还是单圈好)

    双向无线充电是什么意思(无线充电双圈好还是单圈好)

  • iphne怎么设置来电铃声(苹果手机如何设置来电模式)

    iphne怎么设置来电铃声(苹果手机如何设置来电模式)

  • 荣耀20有没有红外线功能(荣耀20有没有红包助手)

    荣耀20有没有红外线功能(荣耀20有没有红包助手)

  • windows没有检测到任何网络硬件(windows没有检测到正确安装的网络适配器)

    windows没有检测到任何网络硬件(windows没有检测到正确安装的网络适配器)

  • 京东退货如何填单号(京东退货如何填单号 京东退货在哪里填单号)

    京东退货如何填单号(京东退货如何填单号 京东退货在哪里填单号)

  • linux怎么添加每天定时任务? linux添加定时任务的教程(linux怎么添加命令)

    linux怎么添加每天定时任务? linux添加定时任务的教程(linux怎么添加命令)

  • 为Linux系统配置多语言环境的基本方法讲解(linux的系统配置文件)

    为Linux系统配置多语言环境的基本方法讲解(linux的系统配置文件)

  • 为什么那么多人转行编程都首选Java(为什么那么多人考公务员)

    为什么那么多人转行编程都首选Java(为什么那么多人考公务员)

  • 使用Python实现一个堆栈结构(利用python)

    使用Python实现一个堆栈结构(利用python)

  • 拆迁补偿款如何做账务处理
  • 玉米大量收购
  • 信息采集需要填两个家庭成员,但只能有一个监护人
  • 税款状态已缴款未入库
  • 进口环节应纳消费税的组成计税价格
  • 小规模纳税人普通发票可以抵税吗
  • 坏账转销会计分录应收帐款金额怎么写
  • 进项税当月申报怎么申报
  • 个人捐赠支出扣除30%和100%扣除
  • 发票先收到下个月才付款
  • 车船发票什么样子
  • 汽车违章罚款在哪里缴纳
  • 个人股东从公司借款合法吗
  • 存货的计税价格是什么
  • 公司购买的汽车可以一次性扣除吗
  • 税前扣除的固定资产
  • 小规模建筑工程
  • 车间办公费计入什么会计科目
  • 移动纸质发票
  • 简述国内采购流程
  • wiwin11
  • 金税盘申请电子发票成功后怎样手工导入
  • 金税盘纳税申报
  • 如何升级win10系统版本
  • 企业职工工伤赔偿标准税前扣除
  • linux 速度
  • 实缴注册资本股权转让怎么交税
  • msoxmled.exe是什么软件
  • 归属性质
  • wordpress恢复主题默认设置
  • vue发送数据
  • idea安装vue.js
  • 不用财务软件的公司要去吗
  • 控制系统动力学
  • thinkphp项目怎么运行
  • spring boot整合hibernate
  • yum命令详解
  • 应收账款提了坏账后收回
  • 企业的差旅费计入什么科目
  • 财政拨付资金什么意思
  • 汇算清缴退回来的钱会计分录怎么做
  • Android ViewPager2 + Fragment 联动
  • 帝国cms界面
  • 批量替换多个word文档的同一内容
  • 母公司给我们减工资
  • 经营活动现金净流量为正说明什么
  • mysql操作步骤
  • 公司印章样子
  • 个人提供的劳务费要开发票,但是薪资不需要开发票
  • 职业年金是什么意思?退休后怎么算职业年金?
  • 利润分配的账务处理视频
  • 交易性金融资产入账价值怎么计算
  • 新股东入股的账务处理
  • 产权转移数据印花税子目
  • 缴纳工会经费的依据
  • 年中重新建账还要年初数吗?
  • mysql多表内连接查询
  • mysql 5.7.18 winx64密码修改
  • windows有哪些好用的软件
  • win7系统的虚拟内存在哪里
  • linux cut-c
  • Win7系统怎么打开蓝牙
  • win10 windows设置
  • win10怎么设置扩展屏
  • lessons there是什么意思
  • cocos2dx入门
  • js显示nan
  • Vuforia ImageTarget Native版本编译
  • 嗌中怎么读
  • unity如何调整界面
  • js闭包作用问题解决应用
  • es6新方法有哪些
  • 弹簧设计软件手机版
  • python 生成器send
  • angularjs教程
  • 猫的喵喵
  • 3ds 俄罗斯方块
  • 技术咨询服务费税率
  • 江苏地税局官网网站
  • dhl清关需要提供资料嘛
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设