栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

(MQ消息队列)day67javaEE基础查漏补缺

(MQ消息队列)day67javaEE基础查漏补缺

MQ消息队列

1.项目重启:docker的编排启停指令。2.同步和异步的区别:3.同步调用的问题4.异步调用方案:5.同步异步如何选择:6.常见的消息队列和选择:8.rabbitMQ端口:9.消息模式:10.RabbitMQ中的一些角色:11.virtualHost虚拟主机:12.什么是SpringAMQP:13.消息堆积问题怎么解决:14.work的能者多劳:15.交换机的作用是什么?16.声明队列、交换机、绑定关系的Bean是什么?17.点对点和订阅模式的简单区分:18.队列存储消息只要不取能一直存?19.队列可以在消费者创建,也可以在生产者创建20.交换机和队列可以绑定路由规则。路由规则通配符:#,*。21.队列到底能存多长时间22.一个服务器能创建多少交换机,多少队列啊23.这个消息队列没有事务,消息丢失的话看日志,手动修改。24.收,发消息:都要设置消息转换器。用json25.`Routingkey` 一般都是有一个或多个单词组成,多个单词之间以”.”分割,例如: `china.news`26.总结一下mq的注解。27.为什么要再启动类上写@bean???

1.项目重启:docker的编排启停指令。 2.同步和异步的区别:

同步通讯:就像打电话,需要实时响应。(不能跟多个人同时通话)

异步通讯:就像发微信,不需要马上回复。(可以跟多个人通话,但响应会有延迟。)

3.同步调用的问题
dubbo和feign 是同步发送请求。
新增功能会有耦合度高,

耗时也会增加,只能串联顺序执行。

网络波动服务忙

级联失败。
微服务间基于Feign的调用就属于同步方式,存在一些问题

- 耦合度高:每次加入新的需求,都要修改原来的代码
- 性能下降:调用者需要等待服务提供者响应,如果调用链过长则响应时间等于每次调用的时间之和。
- 资源浪费:调用链中的每个服务在等待响应过程中,不能释放请求占用的资源,高并发场景下会极度浪费系统资源
- 级联失败:如果服务提供者出现问题,所有调用方都会跟着出问题,如同多米诺骨牌一样,迅速导致整个微服务群故障


4.异步调用方案:
异步调用通过事件驱动模式(Broker)来解决上面同步调用问题

- 耦合度低:每个服务都可以灵活插拔,可替换
- 性能提升:无需等待订阅者处理完成,响应更快速
- 故障隔离:服务没有直接调用,不存在级联失败问题
- 流量削峰:不管发布事件的流量波动多大,都由Broker接收,订阅者可以按照自己的速度去处理事件
5.同步异步如何选择:

    实时响应用同步

    其他可以用异步

6.常见的消息队列和选择:

1)RabbitMQ、ActiveMQ、RocketMQ、Kafka

2)选择:消息延迟和单机吞吐量成反比

如果数据量一般用RabbitMQ

海量数据用kafka

rocketmq属于综合能力好。
8.rabbitMQ端口:

浏览器访问mq端口:15672

java后台访问mq端口:5672

9.消息模式:

点对点:相当于私聊,一个消息只能被一个消费者接收

发布/订阅:微信群聊,一个消息可以被多个消费者接收

rpc同步调用,实际用的很小。

10.RabbitMQ中的一些角色:

publisher:生产者consumer:消费者exchange个:交换机,负责消息路由queue:队列,存储消息virtualHost:虚拟主机,隔离不同租户的exchange、queue、消息的隔离 11.virtualHost虚拟主机:

一个项目创建一个账号并且创建一个虚拟主机,账户和主机之间进行关联。

虚拟主机之间是相互隔离的。相当于mysql里的库。

12.什么是SpringAMQP:

AMQP:是用于在应用程序之间传递业务消息的开放标准。该协议与语言和平台无关,更符合微服务中独立性的要求。

AMQP:是一个高级队列协议,跟语言和平台无关

SpringAMQP:是基于java语言实现AMQP协议的一套API规范

SpringAMQP:通过封装rabbitMQ原生代码实现mq消息发送和接口

13.消息堆积问题怎么解决:

work消息模型:可以做消费者集群。

14.work的能者多劳:

默认:不管消费者性能快还是慢,都是按总数平均分配。

消费者性能不一致时:加配置prefetch:1开启能者多劳模式。

15.交换机的作用是什么?

接收publisher发送的消息

FanoutExchange的会将消息路由到每个绑定的队列

不能缓存消息,路由失败,消息丢失

16.声明队列、交换机、绑定关系的Bean是什么?

QueueFanoutExchangeBinding 17.点对点和订阅模式的简单区分:

一个队列是点对点,多个队列是订阅模式。

不绑定队列,消息不会被暂存,会丢失消息。

消费者只能监听队列,不能直接绑定交换机。

18.队列存储消息只要不取能一直存?

看硬盘空间,堆积过多会挂。

19.队列可以在消费者创建,也可以在生产者创建 20.交换机和队列可以绑定路由规则。路由规则通配符:#,*。 21.队列到底能存多长时间

可以做持久化,没宕机可以一直存。

22.一个服务器能创建多少交换机,多少队列啊

至少十几个交换机,上百个队列。

china.*.*也支持
23.这个消息队列没有事务,消息丢失的话看日志,手动修改。 24.收,发消息:都要设置消息转换器。用json
 @Bean
    public MessageConverter jsonMessageConverter() {
        return new Jackson2JsonMessageConverter();
    }

json:空间小,跨平台,可读性好

25.Routingkey 一般都是有一个或多个单词组成,多个单词之间以”.”分割,例如: china.news

通配符规则:

#:代指0个或多个单词

*:代指一个单词

26.总结一下mq的注解。
监听队列
@RabbitListener(queues = "simple.queue")
 
 创建交换机、队列和路由规则并监听
 @RabbitListener(bindings =@QueueBinding(
    value = @Queue("direct.queue1"),
    exchange = @Exchange(name = "direct.exchange",type = ExchangeTypes.DIRECT),
    key = {"vip","base"}//key = "china.#"
))

//监听并创建队列
@RabbitListener(queuesToDeclare = @Queue("object.queue"))

27.为什么要再启动类上写@bean???

在配置类上写不行吗。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/762237.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号