简单的微服务

微服务

Spring Cloud Alibaba

对内 RPC,对外 REST

(RPC,Remote Procedure Call 即远程过程调用)

  • JSON,序列化要 2 次,即 对象 - JSON 字符串 - 二进制

Nacos

主要功能:服务注册和发现、服务健康监测、动态配置服务、动态DNS…

Nacos Config

test

Dubbo

https://dubbo.apache.org/zh/docs/v2.7/user/

aobing

经典图:

0:服务容器负责启动,加载,运行服务提供者

1:服务提供者在启动时,向注册中心注册自己提供的服务

2:服务消费者在启动时,向注册中心订阅自己所需的服务

3:注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者

4:服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用

5:服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心

注册中心负责服务地址的注册与查找,相当于目录服务,服务提供者和消费者只在启动时与注册中心交互,注册中心不转发请求,压力较小

balabala概念什么鬼~~

Dubbo SPI

改进版的 Java SPI

能够得到指定名字的实现类实例,Java SPI 只能一股脑全部实例化

自适应扩展

@Adaptive

首先根据配置来进行 SPI 扩展的加载,但是不想在启动的时候加载这个扩展,我想根据请求的参数来动态选择对应的扩展

为你想扩展的接口生成一个代理类,可以通过JDK 或者 javassist 编译你生成的代理类代码,然后通过反射创建实例

end

服务暴露

URL!!

1
protocol://username:password@host:port/path?key=value&key=value

暴露的过程就在 Spring 容器刷新后调用 onApplicationEvent 方法

Sentinel

test

RocketMQ

test

Seata

test

Alibaba Cloud SchedulerX

test