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.同步异步如何选择:
实时响应用同步
其他可以用异步
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:是用于在应用程序之间传递业务消息的开放标准。该协议与语言和平台无关,更符合微服务中独立性的要求。
13.消息堆积问题怎么解决:AMQP:是一个高级队列协议,跟语言和平台无关
SpringAMQP:是基于java语言实现AMQP协议的一套API规范
SpringAMQP:通过封装rabbitMQ原生代码实现mq消息发送和接口
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???
在配置类上写不行吗。



