SpringCloud
微服务的核心就是将传统的一站式应用,根据业务拆分成一个一个的服务,彻底地去耦合,每一个微服务提供单个业务功能的服务,一个服务做一件事,从技术角度看就是一种小而独立的处理过程,类似进程概念,能够自行单独启动,或销毁,拥有自己独立的数据库。
微服务的架构:是一种架构模式,提倡将单一应用程序划分成一组小的服务,服务之间互相协调,互相配合,为用户提供最终价值,每个服务运行在其独立的进程中
每个服务围绕着具体业务进行构建,并且能够被独立的部署到生产环境,应当尽量避免统一的,集中式的服务管理机制
针对具体的一个服务而言,应根据业务上下文选择合适的语言,工具对其进行构建。
微服务优点:足够内聚,足够小,代码容易理解,一个服务负责一个业务
能够被小团队单独开发
松耦合
用不同的语言开发
易于和第三方集成
微服务只是业务逻辑的代码,不会和html,css或其他界面组件混合
每个微服务都有自己的存储能力,可以有自己的数据库,也可以有统一的数据库
缺点:开发人员要处理分布式系统的复杂性
多服务运维难度
系统部署依赖
服务间的通信成本
数据一致性
系统集成测试
性能监控
阿里 dubbo 京东 JSF 新浪微博Motan 当当网dubbo
dubbo和springCloud对比
Dubbo |
SpringCloud |
|
服务注册中心 |
Zookeeper |
SpringCloud Netflix eureka |
服务调用方式 |
RPC |
REST API |
服务监控 |
Dubbo-monitor |
SpringBoot Admin |
断路器 |
不完善 |
SpringCloud Netflix Hystrix |
服务网关 |
无 |
SpringCloud netfix Zuu了 |
分布式配置 |
无 |
SpringCloud Config |
服务跟踪 |
无 |
SpringCloud Sleuth |
消息总线 |
无 |
SpringCloud Bus |
数据流 |
无 |
SpringCloud Stream |
批量服务 |
无 |
SpringCloud Task |
dubbo可以满足企业的需求,但是更好的东西,大家更愿意去使用(Spring cloud)
最大区别:SpringCloud抛弃了Dubbo的rpc通信,采用的是基于HTTP的REST方式
SpringCloud基于SpringBoot提供了一套服务解决方案,包括服务注册中心与发现,配置中心,全链路监控,服务网关,负载均衡,熔断器等组件,除了基于Netflix的开源组件做高度抽象封装
SpringBoot提供了一套简单易懂、易部署和易维护的分布式系统开发工具
SpringCloud=分布式微服务架构下的一站式解决方案,是各个微服务架构落地技术的集合体,( 微服务全家桶)
SpringBoot专注于快速方便的开发单个个体微服务
SpringCloud是关注全局的微服务协调整理治理框架,它将SpringBoot开发的一个个单体微服务整合并管理起来,为各个微服务质检提供配置管理、服务发现、断路器、路由、微代理、事件总线、全局锁、决策竞选
SpringBoot可以离开SpringCloud独立使用开发项目,但是SpringCloud离不开SpringBoot,属于依赖关系(SpringCloud依赖于SpringBoot)
SpringBoot专注于快速、方便的开发单个微服务个体,SpringCloud关注全局的服务治理框架
一个Project带着多个Module子模块
Txservicecloud父工程(Project)下初次带着3个子模块(Module)
txservicecloud-common封装的整体entity接口/公共配置
txservicecloud-provider-dept-8001 微服务落地的服务提供者
txservicecloud-consumer-dept-80 微服务调用的客户端使用
@SpringBootApplication
@RequestMapping
@Autowired
@Configuration
@RestController
@Bean
@RestTemplate:Spring访问的一种模板,注入mvc容器中
@EnableEurekaService
@EnableEureKaClient
Eureka是NetFlix的一个子模块,也是核心模块,EureKa是一个基于REST的服务,用于定位服务,以实现云端中间层服务发现 和故障转移
只需要使用服务的标识符,就可以访问到服务(dubbo的注册中心,zookeeper)
SpringCloud封装了Netflix公司开发的EureKa模块来实现服务注册和发现
EureKa采用C-S的设计架构,EureKaServer作为服务注册功能的服务器,服务注册中心
EureKa包含两个组件:EureKa Server和EureKa Client
EureKa Server提供服务注册服务
各个节点启动后,会EureKa Server中进行注册;EureKa Server中的服务注册表中将会存储所有可用服务节点的信息
EureKa Server 提供服务注册和发现
Service Provider服务提供方将自身服务注册到EureKa,从而使服务消费方能够找到
Service Consumer服务消费方从EureKa获取注册服务列表,从而能够消费
.yml配置文件
server:
port: 8888
eureka:
instance:
hostname:localhost
client:
register-with-eureka:false
fetch-registry:false
service-url:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
eureka:
client:
service-url:
defaultZone:http://localhost:7001/eureka/
instance:
instance-id:txservicecloud-dep-8001
prefer-ip-address:true
加入Actuator依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<build>
<finalName>txservicecloud</finalName>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<configuration>
<delimiters>
<delimit>@</delimit>
</delimiters>
</configuration>
</plugin>
</plugins>
</build>
因为微服务本身其实使健康的,此时本不应该注销这个微服务
Eureka通过“自我保护模式”
Eureka集群配置,就是多个Eureka进行配置,然后一起工作
改端口,改yml配置文件
如何包含Eureka客户端
要在您的项目中包含Eureka客户端,使用组org.springframework.cloud
和工件id spring-cloud-starter-eureka
的启动器。有关 使用当前的Spring Cloud发布列表设置构建系统的详细信息,请参阅Spring Cloud项目页面。
注册Eureka
当客户端注册Eureka时,它提供有关自身的元数据,例如主机和端口,运行状况指示符URL,主页等。Eureka从属于服务的每个实例接收心跳消息。如果心跳失败超过可配置的时间表,则通常将该实例从注册表中删除。
示例eureka客户端:
@Configuration
@ComponentScan
@EnableAutoConfiguration
@EnableEurekaClient
@RestController
public class Application {
@RequestMapping("/")
public String home() {
return "Hello world";
}
public static void main(String[] args) {
new SpringApplicationBuilder(Application.class).web(true).run(args);
}
}
(即完全正常的Spring Boot应用程序)。在这个例子中,我们明确地使用@EnableEurekaClient
,但只有Eureka可用,你也可以使用@EnableDiscoveryClient
。需要配置才能找到Eureka服务器。例:
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
其中“defaultZone”是一个魔术字符串后备值,为任何不表示首选项的客户端提供服务URL(即它是有用的默认值)。
从Environment
获取的默认应用程序名称(服务ID),虚拟主机和非安全端口分别为${spring.application.name}
,${spring.application.name}
和${server.port}
。
@EnableEurekaClient
使应用程序成为Eureka“实例”(即注册自身)和“客户端”(即它可以查询注册表以查找其他服务)。实例行为由eureka.instance.*
配置键驱动,但如果您确保您的应用程序具有spring.application.name
(这是Eureka服务标识或VIP的默认值),那么默认值将会很好。
有关可配置选项的更多详细信息,请参阅EurekaInstanceConfigBean和EurekaClientConfigBean。
使用Eureka服务器进行身份验证
如果其中一个eureka.client.serviceUrl.defaultZone
URL中包含一个凭据(如http://user:password@localhost:8761/eureka
)),HTTP基本身份验证将自动添加到您的eureka客户端。对于更复杂的需求,您可以创建@Bean
类型DiscoveryClientOptionalArgs
并注入ClientFilter
实例,所有这些都将应用于从客户端到服务器的调用。