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

  • vivo x6s A怎么录屏幕视频(vivox6s录屏怎么录内部声音)

    vivo x6s A怎么录屏幕视频(vivox6s录屏怎么录内部声音)

  • 外拨转来电是不是拉黑了(外拨转入来电显示是怎么回事?)

    外拨转来电是不是拉黑了(外拨转入来电显示是怎么回事?)

  • 抖音极速版跟抖音有什么区别(抖音极速版跟抖音火山版哪个更挣钱?)

    抖音极速版跟抖音有什么区别(抖音极速版跟抖音火山版哪个更挣钱?)

  • 为什么pr导出视频找不到文件(为什么pr导出视频没声音)

    为什么pr导出视频找不到文件(为什么pr导出视频没声音)

  • 联想小新怎么强制开机(联想小新怎么强制退出软件)

    联想小新怎么强制开机(联想小新怎么强制退出软件)

  • 微信朋友圈怎么修改已经发布的内容(微信朋友圈怎么置顶)

    微信朋友圈怎么修改已经发布的内容(微信朋友圈怎么置顶)

  • 帮别人辅助注册微信号有坏处吗(帮别人辅助注册微信)

    帮别人辅助注册微信号有坏处吗(帮别人辅助注册微信)

  • zip压缩包是什么意思(zip压缩包是什么文件)

    zip压缩包是什么意思(zip压缩包是什么文件)

  • vivos1pro是闪充么(vivos1pro是闪充吗)

    vivos1pro是闪充么(vivos1pro是闪充吗)

  • 米聊怎么添加陌生好友(米聊怎么添加好友)

    米聊怎么添加陌生好友(米聊怎么添加好友)

  • 58同城app怎么扫码(58同城app的扫一扫在哪里)

    58同城app怎么扫码(58同城app的扫一扫在哪里)

  • 怎样可以连接加密wifi(怎样可以连接加速器软件)

    怎样可以连接加密wifi(怎样可以连接加速器软件)

  • 算法的时间复杂度定义(算法的时间复杂性)

    算法的时间复杂度定义(算法的时间复杂性)

  • 苹果手机可以控制另外一个手机(苹果手机可以控制空调吗?怎么设置?)

    苹果手机可以控制另外一个手机(苹果手机可以控制空调吗?怎么设置?)

  • xr怎么更新ios13(苹果xr怎么更新系统13.0)

    xr怎么更新ios13(苹果xr怎么更新系统13.0)

  • iphonexr有红外遥控吗(iphonexr有红外线)

    iphonexr有红外遥控吗(iphonexr有红外线)

  • vivox27支持红外吗(vivox27支持红外功能吗)

    vivox27支持红外吗(vivox27支持红外功能吗)

  • 拼多多聊天怎么发视频(拼多多聊天怎么拉黑对方)

    拼多多聊天怎么发视频(拼多多聊天怎么拉黑对方)

  • 小程序开发类型有哪些(小程序开发方式)

    小程序开发类型有哪些(小程序开发方式)

  • macOS Big Sur 11.0.1(20B29)正式版发布(附可使用的Mac机型)

    macOS Big Sur 11.0.1(20B29)正式版发布(附可使用的Mac机型)

  • scanserver.exe - scanserver是什么进程 有什么用

    scanserver.exe - scanserver是什么进程 有什么用

  • Vue项目安装less和less-loader(vue项目安装路由)

    Vue项目安装less和less-loader(vue项目安装路由)

  • lscpu命令  显示CPU架构信息

    lscpu命令 显示CPU架构信息

  • 列表页、文章页调用所有顶级栏目文章的方法(文章列表是什么)

    列表页、文章页调用所有顶级栏目文章的方法(文章列表是什么)

  • 厂房出租开发票怎么交税
  • 印花税减免税优惠政策202
  • 进口关税怎么做分录
  • 货运代理费计入固定资产吗
  • 如何查询开出的全电发票
  • 折扣折让属于什么科目
  • 滴滴能出票吗
  • 销售费用有业务招待费餐费么
  • 税收滞纳金计入营业外支出的哪一项
  • 员工出差有补助吗
  • 行政事业性收费票据
  • 现代服务业加计抵减政策适用范围
  • 免税项目怎么做账
  • 应交税费科目核算
  • 餐饮加盟公司怎么经营
  • 员工工资怎么计算公式
  • 房地产公司苗木账务处理
  • 所得税汇算清缴分录怎么做
  • 经济纠纷的解决途径包括哪些
  • 风险纳税人不允许领用发票
  • 销项税额抵减是怎么回事
  • 预提固定资产折旧费
  • 租赁合同印花税怎么交,一年一次吗
  • 超市收代金券如何处理
  • win11专业版企业版家庭版哪个玩游戏好
  • 福利费用会计分录
  • 银行汇票银行不予受理的是
  • 非上市公众公司收购办法
  • php unit
  • php循环语句
  • 变电所的相关费用是什么
  • 税控抵税
  • 【机器学习】python实现吴恩达机器学习作业合集(含数据集)
  • php读取excel数据
  • vue网上商城项目
  • 机票的退票费计入什么会计科目
  • node.js最新版本
  • 利息收入税务处理办法
  • 甲供材料总额法和差额法
  • 普票与专票的区别在哪?它各自的特点?
  • mongodb入门教程
  • 海关进口增值税专用缴款书稽核比对可能出现哪些结果
  • 怎么作废银联在网上银行
  • 非应税项目是有哪些项目
  • 应交增值税结转账务处理
  • 审计报告的分类不包含
  • 合同未约定开票但对方不给开
  • 代理进口货物如何确定增值税纳税人
  • 政府专项基金属于什么类
  • 外国专家经费管理办法
  • 流动性比率怎么算
  • 4月确认收入5月支出
  • 小规模纳税人怎么申报个人所得税
  • 会务费发票开普票还是专票
  • 未开发票已付款
  • 库存商品的成本计算
  • 增值税专用发票的税率是多少啊
  • 房地产企业会计处理实务
  • 会计交接事项有哪些
  • 查找星期几
  • explain分析sql效率的方法
  • win2003安装
  • Windows Server 2008中安装DNS服务器详细图文教程
  • windows蓝屏代码大全及解决方案
  • ubuntu16.04英文版安装教程
  • mac上安装ios app
  • os x10.11el capitan beta6更新了什么?os x10.11el capitan beta6发布下载
  • linux bye
  • win2008远程桌面
  • ppap是什么文件
  • js倒计时结束操作
  • node.js的流的作用
  • cocos2dx 2.2.2
  • 详细的收藏
  • nodejs npm package.json中文文档
  • 公司可以报停吗
  • 四川省国家税务局官网
  • 江苏医保给家人用怎么操作
  • 人文考试多少分合格
  • 会计审计和税务服务属于什么税目
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设