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

  • 快手怎么直播(快手怎么直播放电影)

    快手怎么直播(快手怎么直播放电影)

  • nfc常开有什么弊端(nfc 常开)

    nfc常开有什么弊端(nfc 常开)

  • 苹果屏幕字体怎么设置(苹果屏幕字体怎么改大小)

    苹果屏幕字体怎么设置(苹果屏幕字体怎么改大小)

  • 微信可以关联另一个微信号(微信可以关联另一个微信号的聊天记录)

    微信可以关联另一个微信号(微信可以关联另一个微信号的聊天记录)

  • 腾讯会议断开音频会被主持人发现吗(腾讯会议断开音频怎么设置)

    腾讯会议断开音频会被主持人发现吗(腾讯会议断开音频怎么设置)

  • 为什么抖音视频已经发布了但是还是看不了(为什么抖音视频不能保存到本地)

    为什么抖音视频已经发布了但是还是看不了(为什么抖音视频不能保存到本地)

  • 青桔单车供电原理(青桔电动车怎么恢复供电)

    青桔单车供电原理(青桔电动车怎么恢复供电)

  • 隐藏会话关联qq看得到吗(隐藏会话关联qq会显示未读吗)

    隐藏会话关联qq看得到吗(隐藏会话关联qq会显示未读吗)

  • vivox6有没有分屏功能(vivox6分屏)

    vivox6有没有分屏功能(vivox6分屏)

  • 苹果xr掉水里立马拿出来有影响吗(苹果xr掉水里立马拿出来多久能充电)

    苹果xr掉水里立马拿出来有影响吗(苹果xr掉水里立马拿出来多久能充电)

  • 荣耀30s支持内存卡吗(荣耀30s内存256g怎么样)

    荣耀30s支持内存卡吗(荣耀30s内存256g怎么样)

  • 手机没声音带耳机有声(手机没声音带耳机也没声音 连接蓝牙有声音)

    手机没声音带耳机有声(手机没声音带耳机也没声音 连接蓝牙有声音)

  • 小米9没网络怎么解决(小米9没网络怎么回事)

    小米9没网络怎么解决(小米9没网络怎么回事)

  • airpods pro有杂音滋滋怎么解决(Airpods Pro有杂音怎么维修)

    airpods pro有杂音滋滋怎么解决(Airpods Pro有杂音怎么维修)

  • ipad闪退黑屏怎么修复(ipad闪退黑屏怎么办)

    ipad闪退黑屏怎么修复(ipad闪退黑屏怎么办)

  • 如何把视频下载到电脑桌面(如何把视频下载到mp 3)

    如何把视频下载到电脑桌面(如何把视频下载到mp 3)

  • 为什么excel里长数字显示出来和原来不符(excel中长数字无法显示)

    为什么excel里长数字显示出来和原来不符(excel中长数字无法显示)

  • 优酷免流中是什么情况(优酷免流中是什么意思)

    优酷免流中是什么情况(优酷免流中是什么意思)

  • 小米6自带的大头多少w的(小米六的)

    小米6自带的大头多少w的(小米六的)

  • 手机怎么关闭省电模式(手机怎么关闭省电功能)

    手机怎么关闭省电模式(手机怎么关闭省电功能)

  • Reno Ace怎么添加桌面插件(reno ace2 nfc)

    Reno Ace怎么添加桌面插件(reno ace2 nfc)

  • xsmax支持30w快充么

    xsmax支持30w快充么

  • 拼多多上有扫一扫么(拼多多上有没有扫一扫功能)

    拼多多上有扫一扫么(拼多多上有没有扫一扫功能)

  • 微信小程序插件--wxml-to-canvas(生成图片)(微信小程序插件有哪些)

    微信小程序插件--wxml-to-canvas(生成图片)(微信小程序插件有哪些)

  • 织梦DEDECMS栏目后台设置隐藏,前台栏目如何显示(织梦如何给栏目增加缩略图)

    织梦DEDECMS栏目后台设置隐藏,前台栏目如何显示(织梦如何给栏目增加缩略图)

  • 外资企业内资企业
  • 地税办理流程
  • 投资性房地产出售时公允价值变动损益
  • 工资交税是用累计税吗
  • 私人企业利润怎么分配?
  • 记账人和复核人是一个人吗
  • 年底预收货款如何入账
  • 房贷怎么申报抵押贷款
  • 普通增值税发票是否可以抵扣?
  • 进项税当月申报怎么申报
  • 工程项目垃圾清运项目编码
  • 教育费附加会计分录
  • 收到技术服务费计入什么科目
  • 如何确定旧机器的折旧年限?
  • 递延所得税资产怎么计算
  • 购入资产当月开始计提折旧
  • 已认证抵扣的进项税额转出做账的会计处理
  • 软件开发行业的现状
  • 报销培训费怎么做账
  • php导入
  • 偿还债券本金和利息
  • 结霜的早晨
  • 职工薪酬纳税调整明细表案例
  • 资金支出预算的项目
  • 手撕发票怎样盖章子
  • 允许加计扣除的委托境外研发费用
  • opencvcuda
  • php怎么上传图片并保存到数据库
  • 做账计提是什么意思
  • 进项税抵增值税
  • 阴影等级是什么
  • 建立access数据库一般需要五个步骤
  • 任意盈余公积金的用途
  • 出口化妆品会计怎么做账
  • 运输服务属于生活服务吗
  • 减免税的三种方式
  • 业务招待费的企业所得税扣除标准
  • 职工薪酬纳税调整明细表税收金额
  • 车保险会计怎么做分录
  • 免费品尝活动广告语
  • 应交税费核算规定最新
  • 金税盘技术维护费
  • 销项税大于进项税后,税金如何算
  • 新成立公司申报个税流程
  • 开发成本转到哪里
  • 主营业务成本包括哪些
  • 以前年度损益调整账务处理分录
  • 酒店食材成本如何分析
  • 应收账款是什么意思
  • WINDOWS体验指数5.1
  • linux虚拟系统
  • 虚拟机怎么手动设置ip地址
  • winxp系统安装教程
  • ubuntu server initramfs
  • 电脑windows xp
  • 装win8还是win10
  • win7玩游戏全屏
  • Win10 Build 10586.107正式推送 主要修复bug
  • bootstrap-treeview.js
  • js判断手机浏览器设置了电脑版浏览
  • ExtJS4 表格的嵌套 rowExpander应用
  • cocos onload
  • jquery操作
  • python3循环语句
  • nodejs init
  • js键盘事件有哪些?各自的作用如何
  • js模拟new
  • dom4j解析xml字符串步骤
  • 每天一篇小练笔30字
  • python能不能开发微信小程序
  • jquery实现倒计时效果
  • 山西地方税务局领导班子
  • 税务局分类分级
  • 重大税务案件审理办法51号令
  • 安徽省渔业管理办法第十条规定
  • 陕西省网上税务局怎么报国税(陕西税务局官网申报)
  • 有关节能环保的英语作文
  • 湖南省电子税务局
  • 印花税核算有两种情况,是如何处理的?
  • 北京国税局电话客服热线
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设