中间件(Middleware)是指位于客户端和服务器端之间的软件,用于处理请求和响应,以及提供额外的功能和服务。中间件可以用于各种不同的应用程序,例如Web应用程序、消息传递系统、数据库管理系统等。
在Web应用程序中,中间件可以用于处理请求和响应,例如身份验证、日志记录、缓存、压缩等。中间件可以在请求到达应用程序之前或之后执行,以及在响应发送到客户端之前或之后执行。
常见的Web中间件包括Express、Koa、Django、Flask等。
在JavaWeb中,中间件是指介于操作系统和应用程序之间的软件层,它提供了一些通用的功能和服务,如负载均衡、缓存、消息队列等,可以帮助开发者更方便地构建高性能、可扩展的应用系统。
常见的JavaWeb中间件包括:
1. Web服务器:如Tomcat、Jetty等,用于处理HTTP请求和响应。
2. 数据库连接池:如Druid、HikariCP等,用于管理数据库连接,提高数据库访问性能。
3. 分布式缓存:如Redis、Memcached等,用于缓存数据,减轻数据库负载。
4. 消息队列:如ActiveMQ、RabbitMQ等,用于异步处理消息,提高系统吞吐量。
5. 分布式RPC框架:如Dubbo、gRPC等,用于实现分布式服务调用。
12MQ
什么是MQ?
消息总线(Message Queue),是一种跨进程、异步的通信机制,用于上下游传递消息。由消息系统来确保消息的可靠传递。
MQ是干什么用的?
应用解耦、异步、流量削锋、数据分发、错峰流控、日志收集等等...
MQ衡量标准
服务性能、数据存储、集群架构
主流竞品分析
当前市面上mq的产品很多,比如RabbitMQ、Kafka、ActiveMQ、ZeroMQ和阿里巴巴捐献给Apache的RocketMQ。甚至连redis这种NoSQL都支持MQ的功能。
MQ简介https://baijiahao.baidu.com/s?id=1680580434771197889&wfr=spider&for=pc
RabbitMQ 和kafka
kafka
RabbitMQ
*RabbitMQ 的使用场景有哪些?
抢购活动,削峰填谷,防止系统崩塌。 延迟信息处理,比如 10 分钟之后给下单未付款的用户发送邮件提醒。 解耦系统,对于新增的功能可以单独写模块扩展,比如用户确认评价之后,新增了给用户返积分的功能,这个时候不用在业务代码里添加新增积分的功能,只需要把新增积分的接口订阅确认评价的消息队列即可,后面再添加任何功能只需要订阅对应的消息队列即可。
*RabbitMQ 有哪些重要的角色?
RabbitMQ 中重要的角色有:生产者、消费者和代理: 生产者:消息的创建者,负责创建和推送数据到消息服务器; 消费者:消息的接收方,用于处理数据和确认消息; 代理:就是 RabbitMQ 本身,用于扮演“快递”的角色,本身不生产消息,只是扮演“快递”的角色。
*RabbitMQ 有哪些重要的组件?
ConnectionFactory(连接管理器):应用程序与Rabbit之间建立连接的管理器,程序代码中使用。 Channel(信道):消息推送使用的通道。 Exchange(交换器):用于接受、分配消息。 Queue(队列):用于存储生产者的消息。 RoutingKey(路由键):用于把生成者的数据分配到交换器上。 BindingKey(绑定键):用于把交换器的消息绑定到队列上。
*RabbitMQ 中 vhost 的作用是什么?
vhost:每个 RabbitMQ 都能创建很多 vhost,我们称之为虚拟主机,每个虚拟主机其实都是 mini 版的RabbitMQ,它拥有自己的队列,交换器和绑定,拥有自己的权限机制。
*RabbitMQ 怎么保证消息的稳定性?
提供了事务的功能。 通过将 channel 设置为 confirm(确认)模式。
*RabbitMQ 有几种广播类型?
direct(默认方式):最基础最简单的模式,发送方把消息发送给订阅方,如果有多个订阅者,默认采取轮询的方式进行消息发送。 headers:与 direct 类似,只是性能很差,此类型几乎用不到。 fanout:分发模式,把消费分发给所有订阅者。 topic:匹配订阅模式,使用正则匹配到消息队列,能匹配到的都能接收到。
*RabbitMQ 怎么实现延迟消息队列?
延迟队列的实现有两种方式: 通过消息过期后进入死信交换器,再由交换器转发到延迟消费队列,实现延迟功能; 使用 RabbitMQ-delayed-message-exchange 插件实现延迟功能。
*RabbitMQ 集群有什么用?
集群主要有以下两个用途: 高可用:某个服务器出现问题,整个 RabbitMQ 还可以继续使用; 高容量:集群可以承载更多的消息量。
zookeeper和nacos区别
https://www.cnblogs.com/syq816/p/16332417.htmlhttps://www.cnblogs.com/syq816/p/16332417.html