首页 > 其他分享 >MQ

MQ

时间:2023-03-08 19:23:07浏览次数:38  
标签:Java 队列 Queue 交换机 MQ 消息

1:什么是mq mq的优缺点分别是什么

MQ全称 Message Queue(消息队列),是在消息的传输过程中保存消息的容器。多用于分布式系统之间进行通信。

优点:

应用解耦:提高系统容错性和可维护性

异步提速:提升用户体验和系统吞吐量

削峰填谷:提高系统稳定性

使用了 MQ 之后,限制消费消息的速度为1000,这样一来,高峰期产生的数据势必会被积压在 MQ 中,高峰就被“削”掉了,但是因为消息积压,在高峰期过后的一段时间内,消费消息的速度还是会维持在1000,直到消费完积压的消息,这就叫做“填谷”。使用MQ后,可以提高系统稳定性。

缺点:

系统可用性降低 系统引入的外部依赖越多,系统稳定性越差。一旦 MQ 宕机,就会对业务造成影响。

系统复杂度提高 MQ 的加入大大增加了系统的复杂度,以前系统间是同步的远程调用,现在是通过 MQ 进行异步调用。如何保证消息没有被重复消费?怎么处理消息丢失情况?那么保证消息传递的顺序性?

一致性问题 A 系统处理完业务,通过 MQ 给B、C、D三个系统发消息数据,如果 B 系统、C 系统处理成功,D 系统处理失败。如何保证消息数据处理的一致性?

2:项目中哪些地方用到mq 请分别说明场景

削封填谷也就是使用它可以解决短时间内爆发式的请求任务,在不使用 MQ 的情况下会导致服务处理不过来,出现应用程序假死的情况,而使用了 MQ 之后可以把这些请求先暂存到消息队列中,然后进行排队执行,那么就不会出现应用程序假死的情况了,所以它的第一个应用就是商品秒杀以及产品抢购等使用场景。

 

 

3:市面上常见mq 产品的比较

①Kafka 内存、磁盘。支持大面积堆积

②RabbitMQ 内存、磁盘。支持少量堆积

③ZeroMQ 消息发送端的内存或磁盘中。不支持持久化

④RocketMQ 磁盘。支持大量堆积

⑤ActiveMQ 内存、磁盘、数据库。支持少量堆积

4: javaee 是什么 他的13个开发规范分别是什么

JavaEE是一个开发分布式企业级应用的规范和标准

1、JDBC(Java Database)数据库连接

2、JNDI(Java Naming and Directory Interfaces)Java 的命名和目录接口

3、EJB(Enterprise JavaBean)

4、RMI(Remote Method Invoke)远程方法调用

5、Java IDL(Interface Description Language)/CORBA(Common Object Broker Architecture)Java 接口定义语言/公用对象请求代理程序体系结构

6、JSP(Java Server Pages)

7、Servlet

8、XML(Extensible Markup Language)可扩展标记语言

9、JMS(Java Message Service)Java 消息服务

10、JTA(Java Transaction API)Java 事务 API

11、JTS(Java Transaction Service)Java 事务服务

12、JavaMail

13、JAF(JavaBean Activation Framework)

5:amqp 和 jms的比较

1 通信平台的区别

JMS: 只允许基于JAVA实现的消息平台的之间进行通信 AMQP: 允许多种消息协议进行通信,比如ruby的storm和java的jms都可以在AMQP上进行通信。 结论: AMQP允许多种技术同时进行协议通信

2 通信机制的区别 JMS:消息生产者和消息消费者必须知道对方的Queue AMQP: 消息生产者和消息消费者无须知道对方的Queue,消息生产者将Exchange通过Route key和任意Queue绑定。消息消费者通过Route key从任意Queue中获取Exchange.

3 消息传输机制的区别 JMS:

JMS支持PTP和publis/subscribe机制,PTP只可以点对点通信,public/subscribe在一端发出请求后所有其他端收到消息 AMQP:

1 所有RouteKey相同的Queue接受到数据

2 所有相同的Exchange的Queue接受到数据

3 所有wilecard的Exchange的Queue接受到数据

4 可以让webservice等接受到数据

6: rabbitmq 中的5种工作模式是什么

1、简单模式 HelloWorld 一个生产者、一个消费者,不需要设置交换机(使用 默认的交换机)

2、工作队列模式 Work Queue 一个生产者、多个消费者(竞争关系),不需要设置交换机(使用默认 的交换机)

3、发布订阅模式 Publish/subscribe 需要设置类型为fanout的交换机,并且交换机和队列进行绑定, 当发送消息到交换机后,交换机会将消息发送到绑定的队列

4、路由模式 Routing 需要设置类型为direct的交换机,交换机和队列进行绑定,并且指定routing key,当发送消息到交换机后,交换机会根据routing key将消息发送到对应的队列

5、通配符模式 Topic 需要设置类型为topic的交换机,交换机和队列进行绑定,并且指定通配符方式的 routing key,当发送消息到交换机后,交换机会根据routing key将消息发送到对应的队列

7:mq的消息堆积了该怎么办

设置过期时间、

8:使用过云服务产品没有 请说一下使用的场景

 

9:什么叫做死信,rabbitmq一般什么情况下会产生死信,死信去了哪里?

产生死信的三种情况:

如果queue中的消息被消费者接收, 但是消费者拒绝消费(消费者执行了reject 或nack 并将 requee 参数设置为 false )的时候,这个消息就会变成死信。

消息本身设置了过期时间(TTL), 并且消息过期时间已经生效, 还未被消费的消息就会变成死信【特点是每个消息的过期时间都不同】 可以设置队列中所有消息的过期时间,如果消息过期时间已经生效,消息还未被消费.

队列设置了最大长度限制, 当队列已满, 之后从交换机路由到该队列的消息会自动变成死信。 

在这里插入图片描述

10:rabbitmq 延时队列怎样实现的 一般用在什么场景

延迟队列,即消息进入队列后不会立即被消费,只有到达指定时间后,才会被消费。很可惜,在RabbitMQ中并未提供延迟队列功能,但是我们有其他的方式可以实现延迟队列,方法就是TTL+死信队列,组合实现延迟队列的效果。

image-20211020212315320

 

 

标签:Java,队列,Queue,交换机,MQ,消息
From: https://www.cnblogs.com/xiao-tt/p/17195804.html

相关文章

  • 串口服务器接入阿里云MQTT协议的软件配置教程
    在之前的文章中我们了解到虚拟串口软件作为TCP客户端来结合串口服务器使用,这一期我们来看一下串口服务器怎样接入阿里云物模型。步骤详尽,一文读懂。1.阿里云MQTT环境配置......
  • 【打怪升级】【rocketMq】如何保证消息不重复消费
    rocket存在重复消费吗?rocket怎么帮我们避免重复消费?如何算重复消费rocket本身其实有一部分思想建立在 at-least-once基础上,rocket保证了生产者发送的消息......
  • 【打怪升级】【rocketMq】如何保证消息顺序消费
    rocket针对有业务顺序的消息如何保证消息的顺序呢 RocketMq的消费模型说到顺序,我们先观察rocket的消费模型:首先,producergroup创建......
  • 【打怪升级】【rocketMq】如何处理积压消息
    遇到消息积压,如何处理?什么是消息积压消费积压是一个很直接的概念,看图:当某一批对应的消息,生产者生产的速度大于消费者消费的速度时,就会发......
  • mq延时队列
    importcom.example.delayedmsg.config.QueueConfig;importorg.slf4j.Logger;importorg.slf4j.LoggerFactory;importorg.springframework.amqp.rabbit.annotation.R......
  • springBoot集成mqtt
    springBoot集成mqtt目录springBoot集成mqtt简介下载启动springBoot集成mqtt结束简介EMQX是一款大规模可弹性伸缩的云原生分布式物联网MQTT消息服务器。作为全球最具扩......
  • RabbitMq
    消息安全发送策略?设置mandatory=true参数,添加监听事件设置备份交换机事务机制异步确认机制设置mandatory=tueexchange根据自身类型和消息routingKey无法匹配......
  • RabbitMQ
    RabbitMQ简介实现了AMQP(高级队列协议)Erlang是面向并发的编程语言,充分利用了CPU的性能,延迟特别低支持多种语言通讯:Java,Python...都有相应的API支持海量......
  • Docker启动RabbitMQ访问15672连接超时解决方法
    docker成功启动rabbitmq后访问15672端口报连接超时原因:rabbitmq默认web界面管理插件是关闭的,需要通过命令开启解决办法:1、查看rabbit的容器id:dockerps2、进入......
  • RocketMQ高可用机制
    RocketMQ高可用机制集群部署模式1.单master模式2.多master模式配置配置文件broker.properties的brokerClusterName需要保持一致brokerId需要为0,0代表为0优缺点......