1:单体应用monolith:
表现:和前面三个项目一样:所有的功能最终都在一个war包里;
缺点:
①编译难,部署难,测试难;
② 扩展难;
③技术选择难
2:微服务:microservice:
微服务:就是把一个大的服务拆成很多小的服务。
优点:
①编译容易,部署容易,测试容易;
② 扩展容易;
③技术选择容易
④容错性高
3:服务治理框架:
①springcloud和dubbo
②Spring cloud是一个基于Spring Boot实现的服务治理工具包
4:五大神兽:
①服务发现——Netflix Eureka(注册中心,皮条客)
②客服端负载均衡——Netflix Ribbon/Feign
③服务网关——Netflix Zuul
④断路器——Netflix Hystrix
⑤分布式配置——Spring Cloud Config
5:springcloud的hello:
5.1:注册中心:
a:pom:web,test,eureka-server
b:配置文件:
主要是端口和地址:
server:
port: 7001
eureka:
instance:
hostname: localhost
client:
registerWithEureka: false #是否要注册到eureka
fetchRegistry: false #表示是否从Eureka Server获取注册信息
serviceUrl:
defaultZone: http://localhost:7001/eureka/ #单机配置
c:启动类:
类上加一个@EnableEurekaServer
5.2:服务提供者:provider
a:pom:web,test,eureka-client
b:配置文件:
端口和服务名和地址:
server:
port: 8001
spring:
application:
name: USER-PROVIDER #不要使用下划线
eureka:
client:
service-url:
defaultZone: http://localhost:7001/eureka
c:启动类:
类上加一个@EnableEurekaClient
d:服务编写:正常的Controller写法
5.3:restTemplate的使用:
a:pom:web,test
b:配置文件:
端口和服务名:
server:
port: 9001
spring:
application:
name: USER-CONSUMER #不要使用下划线
c:启动类:
正常的springboot的启动
d:编写一个正常的Controller:
调用的方法:要注入RestTemplate(就需要有这个配置文件:创建一个类:@Configuration(类)和@Bean(方法上))
String url=“http://localhost:8001/user/”+id;
User user = restTemplate.getForObject(url,User.class);
6:注册中心的负载均衡:
就是配置文件进行相互依赖:
7:加强:负载均衡ribbon:
7.1:多服务提供者:
a:搭建一个注册中心
b:搭建一个服务提供者
c:复制b的项目:修改配置文件:端口
d:启动b和c,都会注册到注册中心:一个服务名对应两个服务
e:和5.3一样搭建一个消费者:
修改:从注册中心获取服务
1)pom中加入eureka-client
2)配置文件:配置注册中心地址
3)restTemplate调用的时候:把地址换成服务名
4)在RestTemplate的bean上加:@LoadBalanced,开启负载均衡
5)修改负载均衡的规则:在配置文件的类里搞一个IRule的bean
8:加强:负载均衡feign:
a:搭建一个注册中心
b:搭建一个服务提供者
c:启动b,都会注册到注册中心
d:和5.3一样搭建一个消费者:
修改:从注册中心获取服务
1)pom中加入eureka-client
2)配置文件:配置注册中心地址
3)controller:没有写业务:
e:修改interface:
导入依赖:web,test,openfeign
创建一个接口(interface):
方法的名字,路径,参数等等和b里的一致:就是把b的方法拷贝过来,把方法体删除
在类上加注解:@FeignClient(value = “USER-FEIGN-PROVIDER”)//提供者在注册中心的服务名
f:修改消费者:
增加依赖:openfeign(但是我们依赖了interface项目,里面有这个依赖了,就不再导入了)
修改Controller的调用:
注入e中的接口:像调用本地方法一样调用就ok
启动类:
加注解:去扫描e中的接口:
@EnableFeignClients(basePackages =“cn.xx.springcloud.client” )//扫描interface的接口