1,SpringCloud是什么?
SpringCloud是微服务的一套解决方案,他不是框架而是很多组件的集合,他可以为SpringBoot创建的一个个的服务模块整合起来进行管理,为各个服务提供了注册中心用于发现服务,配置管理,负载均衡,熔断器等;
2,什么是微服务?
微服务是一种架构风格;
我们可以根据业务功能的不同将传统的一站式的引用拆分成一个个的服务来降低耦合度;
每一个微服务提供单独的业务服务功能;
3,Dubbo和SpringCloud的区别?
1,Dubbo是基于RPC的远程调用;它是基于接口来提供服务的;将其注册到Zookeeper注册中心
2,SpringCloud是基于Http协议的远程调用,我们可以把每一个微服务注册到Eureka注册中心,使用Feign进行调用;
SpringCoud相对于Dubbo的好处:
SpringCoud是基于http远程调用说明它是可以跨语言的,即使是不同的语言开发的微服务模块,之间只要遵循一定的规则就可以实现相互调用;而Dubbo是基于接口的他的局限性就是不能实现跨语言调用;
4,SpringCloud整合Eureka(服务提供端)
- 什么是Eureka?
他其实就是我们的微服务注册中心,我们把开发的微服务注册到Eureka注册中心,让Eureka帮我们管理微服务的IP和端口;我们使用的时候只需要根据http协议进行调用就行了; 并且springcloud eureka有服务提供端和客户端分别来实现服务注册中心和服务的注册;并且其内部默认集成了Ribbon负载均衡和Hystrix熔断器;
2,SpringCloud如何整合Eureka注册中心(服务提供端)?
1,首先导入SpringCloud Eureka坐标
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
2.配置.yml文件明确端口号及Eureka相关配置
server:
port: ${PORT:50101} #服务端口,使用$是为了提供默认值
spring:
application:
name: xc-govern-center #指定服务名
eureka:
client:
registerWithEureka: false #服务注册,是否将自己注册到Eureka服务中,当配置多个Eureka之后需要设置为true
fetchRegistry: false #服务发现,是否从Eureka中获取注册信息,当配置多个是需要设置为true
serviceUrl: #Eureka客户端与Eureka服务端的交互地址,高可用状态配置对方的地址,单机状态配置自己(如果不配置则默认本机8761端口)
defaultZone: ${EUREKA_SERVER:http://eureka01:50101/eureka/}
server:
enable-self-preservation: false #是否开启自我保护模式
eviction-interval-timer-in-ms: 60000 #服务注册表清理间隔(单位毫秒,默认是60*1000)
instance:
hostname: ${EUREKA_DOMAIN:eureka01} #配置默认是第一个Eureka注册中心
3,在启动类上添加开启Eureka注册中心注解
@EnableEurekaServer //标识这是一个Erueka辅助注册中心
public class GovernCenterApplication {
public static void main(String[] args) {
SpringApplication.run(GovernCenterApplication.class, args);
}
}
3,springCloud如何整合eureka客户端?
1,导入springcloud eureka的相关客户端坐标;
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
2,配置.yml文件
eureka:
client:
registerWithEureka: true #服务注册开关
fetchRegistry: true #服务发现开关
serviceUrl: #Eureka客户端与Eureka服务端进行交互的地址,多个中间用逗号分隔
defaultZone: ${EUREKA_SERVER:http://localhost:50101/eureka/}
instance:
prefer-ip-address: true #将自己的ip地址注册到Eureka服务中
ip-address: ${IP_ADDRESS:127.0.0.1}
instance-id: ${spring.application.name}:${server.port} #指定实例id
3,在启动类上添加注解允许发现该服务并注册到Eureka注册中心;
@SpringBootApplication
@EnableDiscoveryClient//允许发现该服务注册到Eureka
public class ApplicationProducer {
public static void main(String[] args) {
SpringApplication.run(ApplicationProducer.class, args);
}
}
5,SpringCloud整合Feign
1,什么是Feign?
Feign是一个轻量级的rest客户端,使用Feign可以很方便的实现http客户端,SpringCloud引入了Feign并且集成了Ribbon负责均衡器,和Hystrix熔断器;
2,SpringCloud整合feign的步骤
1,导入springcloud feign的相关依赖坐标;
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
2,在服务调用方工程中编写Feign的客户端接口;
//feignClient接口 有参数在参数必须加
//@PathVariable("XXX")和@RequestParam("XXX")注解;
@FeignClient("springcloud-producer") //明确feign客户端并指定拉去哪一个服务
public interface UserServiceClient {
@GetMapping("/user/{id}")
public User findOneById(@PathVariable("id") Long id);
}
3,启动类中添加@EnableFeignClients注解;
/*@SpringBootApplication
@EnableDiscoveryClient //发现服务注册到eureka*/
@SpringCloudApplication //此注解取代上面两个注解
@EnableFeignClients //开启feign功能
public class ApplicationConsumer {
public static void main(String[] args) {
SpringApplication.run(ApplicationConsumer.class, args);
}
/*@Bean //将restmplate注入到容器用于调用使用http调用微服务(使用Feign之后就不需要再一次使用这个restmplate了)
@LoadBalanced
public RestTemplate restTemplate() {
return new RestTemplate();
}
*/
}