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

  • 刷机精灵刷华为手机(刷机精灵刷机教程)(华为刷机精灵下载安装)

    刷机精灵刷华为手机(刷机精灵刷机教程)(华为刷机精灵下载安装)

  • pbem00是什么手机(pemm00是什么手机型号)

    pbem00是什么手机(pemm00是什么手机型号)

  • word粘贴无反应(word里面粘贴没反应)

    word粘贴无反应(word里面粘贴没反应)

  • 抖音电影怎么投屏(抖音电影如何投屏)

    抖音电影怎么投屏(抖音电影如何投屏)

  • 无法激活面容id怎么回事(无法激活面容id相机也打不开)

    无法激活面容id怎么回事(无法激活面容id相机也打不开)

  • 手机换尾插后不支持快充了(手机换尾插不是原装的)

    手机换尾插后不支持快充了(手机换尾插不是原装的)

  • 链接到前一条页眉在哪个工具栏中(链接到前一条页眉为什么是灰色的)

    链接到前一条页眉在哪个工具栏中(链接到前一条页眉为什么是灰色的)

  • 手机qq怎么设置自动回复消息的内容(手机qq怎么设置离线状态)

    手机qq怎么设置自动回复消息的内容(手机qq怎么设置离线状态)

  • qq传文件每日上限(qq传文件一天限制多少)

    qq传文件每日上限(qq传文件一天限制多少)

  • 钉钉提交作业为什么不显示了(钉钉提交作业为什么显示两次)

    钉钉提交作业为什么不显示了(钉钉提交作业为什么显示两次)

  • 荣耀20s可以当遥控器吗(荣耀20可以当电视遥控器吗)

    荣耀20s可以当遥控器吗(荣耀20可以当电视遥控器吗)

  • 微信登录环境异常被限制登录怎么处理(微信登录环境异常被限制登录怎么处理?)

    微信登录环境异常被限制登录怎么处理(微信登录环境异常被限制登录怎么处理?)

  • 华为yal一al00是什么型号(华为yal-al00)

    华为yal一al00是什么型号(华为yal-al00)

  • qq标识帽子是什么(qq图标戴帽子)

    qq标识帽子是什么(qq图标戴帽子)

  • iqoo和iqoopro参数对比(iqoopro与iqooneo对比参数)

    iqoo和iqoopro参数对比(iqoopro与iqooneo对比参数)

  • 抖音怎么上商品橱窗(抖音怎么上商品类目)

    抖音怎么上商品橱窗(抖音怎么上商品类目)

  • 日期怎么设置成横杠的(日期怎么设置成7.10)

    日期怎么设置成横杠的(日期怎么设置成7.10)

  • i58265u是低端处理器吗(i58265u性能)

    i58265u是低端处理器吗(i58265u性能)

  • moho&mo是什么牌子(mooi是什么牌子)

    moho&mo是什么牌子(mooi是什么牌子)

  • vivo系统相册在哪里找(vivo手机系统相册)

    vivo系统相册在哪里找(vivo手机系统相册)

  • 小米9后壳是什么材质(小米9 后壳)

    小米9后壳是什么材质(小米9 后壳)

  • vivoy3上市时间(vivoy3上市时间和价格4G)

    vivoy3上市时间(vivoy3上市时间和价格4G)

  • Win11右键上下文菜单存在BUG 微软将着手进行修复(win11桌面右键失效)

    Win11右键上下文菜单存在BUG 微软将着手进行修复(win11桌面右键失效)

  • python如何配置文件路径(python设置配置文件)

    python如何配置文件路径(python设置配置文件)

  • 更改开票信息需要多久
  • 资产负债表的货币资金根据什么填
  • 增值税税率调整为9%
  • 银行存款日记账电子表格模板
  • 飞机发票和行程单可以一起开吗
  • 没有达到起征点的工资忘计申报个税,可以税前扣除吗
  • 已贴花的凭证凡修改后所载金额增加的部分应补贴印花
  • 作为福利手段福利概念的三个条件是
  • 构建固定资产的总结
  • 公司注册成功以后会有什么费用
  • 长期借款利息的会计分录
  • 增值税专用发票几个点
  • 无票收入记账多的进项发票怎么处理?
  • 实际发生额大于账载金额
  • 企业注销前需要固定资产清理吗
  • 企业代扣代缴个人所得税系统
  • 破产清算重整和解
  • 必要收益率的计算题目
  • 临时设施需要验收吗
  • 开票金额与收入金额有差额可以吗
  • 税收筹划有哪些特点?
  • 怎样获取
  • 预提费用支付是指什么
  • 什么时候可以购买火车票
  • 劳务公司发放农民工工资要开发票吗?
  • 会计档案的保管期限是从什么算起
  • PHP:xml_parser_get_option()的用法_XML解析器函数
  • 红冲暂估需要附件吗
  • 新公司成立前期费用
  • 印花税税收优惠政策2023
  • 应纳税所得税计算公式
  • 增值税已认证抵扣
  • win7纯净版系统激活
  • php新手入门教程
  • 房屋装修固定家具是否计入房产税
  • 工程完工后有关工作总结
  • 最小的蓝牙鼠标是哪款
  • 合伙企业利润分配原则
  • 实际出资大于注册资金
  • 游戏ai模式是什么意思
  • 微信小程序开发平台
  • 小程序开发要钱吗
  • 待抵扣进项税额的账务处理
  • 进项税额计入其他流动资产
  • 个人独资为什么不能叫公司
  • 印花税缴纳方式不包括哪些
  • 银行存款日记账怎么记账
  • 出口企业为什么免税又退税
  • 产权转移数据印花税纳税期限
  • 销售旧货和销售使用过的固定资产区别
  • 小规模纳税人和一般纳税人的区别
  • SQL Server实时同步更新远程数据库遇到的问题小结
  • 营业外支出属于费用类科目吗
  • 持有至到期投资和债权投资的区别
  • 房屋租赁合同印花税计税依据
  • 避税唯一安全的方法
  • 根据出库商品的编码
  • 房屋租赁税按什么收
  • 期初固定资产算收入吗
  • 商场代收款合法吗
  • 电子承兑到期怎么申请付款
  • 普通发票作废影响额度吗
  • 分公司第二季度总结报告
  • 如何结转生产成本至库存商品
  • 资产负债表怎么看财务状况
  • linux系统百科
  • dsapi.exe是什么
  • win8系统怎么安装win10
  • windows10 14393版本
  • vi中的命令
  • unity出现bug
  • 安卓手机引导模式设置
  • linux的gunzip命令
  • php开机启动
  • jq绑定事件的方法有哪些
  • android documents
  • 电子发票票种核定申请
  • 闽政通城乡居民养老保险认证
  • 北京商业企业运行基地
  • 重庆国税网上怎么申报
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设