Erlang面向并发的。经常开发游戏。
微服务未必要用java写,所以使用RabbitMQ的优势就体现出来了。
微信的日活跃用户多,会出现高并发,其他的出现高并发的可能性不高。
日志处理,一般用kafka。
Docker->Redis->ZooKeeper->RabbitMQ为什么都需要安装在服务器上呀?
交换机负责路由转发消息的,它本身没有存储消息的能力。
Spring AMQP
v
err还能这样用
消息只能消费一次。
将队列绑定到指定的交换机!
这种方式有点麻烦
转完以后体积太大了。可读性差。有安全漏洞。(字节码是可变的,为什么有安全漏洞??在反序列化的过程中可能会执行一些非法的代码)
消息丢失的消息!
返回ACK,说明,代码有问题,或者路由写错了。可以在开发层面解决。
RabbitMQ 全程Rabbit message queue。
用于实现高效可靠的异步通讯。
早起系统之间的通讯直接采用HTTP进行远程通讯。而现如今采用MQ进行远程通讯,它的优势如下:
它允许生产者发送消息到MQ后不需要等待消费者的处理,能即刻响应。
mq可以将生产者和消费者解耦,生产者只需要将消息发送至MQ,由MQ作为中介将消息传递给消费者,
削峰:
在A系统接收到大量请求时,将请求进行平滑处理,将多余的请求存储至MQ,以避免突发的大量请求对B系统造成过多的压力。
MQ的缺点如下:
在已有的系统中引入MQ无疑会增加系统的复杂性,MQ的异步通讯特性,可能会导致消息丢失,消息重复传递,从而降低系统的数据一致性,引入MQ会增加系统的依赖性,当MQ出现故障时,会导致整个系统的不可用。从而导致系统的可用性降低。
消息中间件基于队列模型实现异步/同步传输数据。
作用:可以实现支撑高并发、异步解耦、流量削峰、降低耦合度。
http请求是同步的过程。
Tomcat服务器是什么呀?
Http请求基于请求与响应的模型,在高并发的情况下,客户端发送大量的请求到达服务器端有可能会导致我们服务器端处理请求堆积。
Tomcat服务器处理每个请求都有自己独立的线程,如果超过最大线程数会将该请求缓存到队列中,如果请求堆积过多的情况下,有可能会导致tomcat服务器崩溃的问题。
所以一般都会在nginx入口实现限流,整合服务保护框架。
什么是nginx。
http请求处理业务逻辑如果比较耗时的情况下,容易造成客户端一直等待,阻塞等待过程中会导致客户端超时发生重试策略,有可能会引发幂等性问题。
接口是为http协议的情况下,最好不要处理比较耗时的业务逻辑,耗时的业务逻辑应该单独交给多线程或者是mq处理。
解耦---没有在一起。
解耦的缺点就是非常消耗cpu的资源。
资源是有限的。
互联网项目:客户端
服务器端
服务器端很少用多线程。客户端不共享。
每个线程都有自己独立的cpu,防止cpu出现上下文切换。
多个线程在同一个cpu上运行,会在同一个cpu上发生上下文切换。
多线程适合小项目。
Mq消息中间件名词
producer: 投递消息到mq服务器端
consumer : 从mq 服务器端获取消息处理业务逻辑。
broker mq服务器端
topic 分类业务逻辑发送短信主题、发送优惠券主题。
Queue 存放消息模型 队列
Message 生产者投递消息报文 : json
什么事ERLANG,RabbitMq是用Erlang语言写的,所以安装MQ需要先安装Erlang。
MQ的端口号是15672 还有一个端口号5672要打开,以后会用到。
查看rabbitmq的版本:rabbitmqctl version
查看erlang的版本:erl
#启动rabbitmq rabbitmq-server
查看rabbitmq的运行状态
ps -ef | grep rabbitmq
RabbitMQ的角色分类:
none:
management:
Policymaker:
Monitoring:
Administrator:
AMQP:高级消息队列协议,是应用层协议的一个开发标准,为面向消息的中间件设计。
rabitmq为什么是基于channel去处理而不是连接?
短连接,三次握手,四次回收,耗时。
长连接----信道。
可能是你的项目路径带中文。
改名称,IDEA有缓存。
磁盘和内存转换的问题。
RabbitMQ采用的协议是AMQP,基于Erlang语言开发的消息中间件
事务的回滚......
Direc模式(路由,过滤条件,会有性能损耗...)
分布式事务消息一致的问题!
Dubbo远程服务调用:
jvm事务
系统与系统之间的通信
Dubbo远程传输不好吗 ?
事务的acid原则,执行方法的完整性。
运单的数据库创建成功了,订单的数据库可能失败了。方法执行的完整性。订单服务的回滚,运单服务不回滚,数据库数据的不一致性,就会出现。
服务与服务之间会存在延迟的。
分布式事务的整体设计思路:
分布式系统中的消息中间件解决分布式事务的问题:
用消息中间件,来代替Dubbo,RabbitMQ高可靠,高可用的特征。
消息的确认机制:
消息冗余
死信队列?
ack是什么
互异,还是互逆
幂等性,保证数据的一致性。
redis的定时任务比较特殊。
延时效益,定时任务,对CPU的占用是比较大,对CPU的压力比较大。延迟时间的时间特别长,就会让cpu一直在那里运算。
什么是雪花算法
定时任务又是什么呀?
去做有挑战的事情吧。