一、springcloud简介
1.什么是springcloud
百度百科的解释为,Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。Spring Cloud并没有重复制造轮子,它只是将各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过Spring Boot风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。
那么springcloud是什么呢,简单地说,springcloud就是官方封装的一整套的对于分布式微服务的技术解决方案。
2.什么是微服务架构
微服务架构是一项在云中部署应用和服务的新技术。微服务可以在“自己的程序”中运行,并通过“轻量级设备与HTTP型API进行沟通”。关键在于该服务可以在自己的程序中运行。通过这一点我们就可以将服务公开与微服务架构(在现有系统中分布一个API)区分开来。在服务公开中,许多服务都可以被内部独立进程所限制。如果其中任何一个服务需要增加某种功能,那么就必须缩小进程范围。在微服务架构中,只需要在特定的某种服务中增加所需功能,而不影响整体进程的架构。
微服务的具体特征
-
一些列的独立的服务共同组成系统
-
单独部署,跑在自己的进程里
-
每个服务为独立的业务开发
-
分布式的管理
3.springcloud的作用
Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智能路由,微代理,控制总线,一次性令牌,全局锁定,领导选举,分布式会话,群集状态)。分布式系统的协调导致锅炉板模式。
使用Spring Cloud开发人员可以快速站出实现这些模式的服务和应用程序。他们可以在任何分布式环境中运行良好,包括开发人员自己的电脑,裸机数据中心和托管平台。
二、微服务简单案例

用户查询一个订单,向订单微服务发送请求,而订单信息中包含了商品信息,那么订单微服务将需要调用商品微服务。
@Configuration
public class RestTemplateConfig {/**
* 创建RestTemplate交给容器
* @return
*/
@Bean
public RestTemplate restTemplate(){
return new RestTemplate();
}
}
订单微服务调用商品微服务
@Service
public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements IOrderService {@Autowired
private RestTemplate restTemplate;@Autowired
private OrderMapper orderMapper;@Override
public Order getOrderById(Long id) {
Order order = orderMapper.selectById(id);
//调用商品微服务获得商品信息
ResponseEntity<Product> entity = restTemplate.getForEntity("http://localhost:8081/product/" + order.getProductId(), Product.class);
order.setProduct(entity.getBody());
return order;
}
}
这样就完成了一个简单的微服务案例
三、Eureka注册中心
1.服务注册和发现机制
服务注册:
服务提供者将所提供服务的信息(服务器IP和端口、服务访问协议等)注册/登记到注册中心
服务发现:
服务消费者能够从服务中心获取到较为实时的服务列表,然后根据一定的策略选择一个服务访问。

2.springcloud版本
Spring Cloud 的版本号并不是我们通常见的数字版本号,而是一些很奇怪的单词。这些单词均为英国伦敦地铁站的站名。同时根据字母表的顺序来对应版本时间顺序,比如:最早 的 Release 版本 Angel,第二个 Release 版本 Brixton(英国地名),然后是 Camden、 Dalston、Edgware、Finchley、Greenwich、Hoxton。

官网中有着Spring Cloud版本对应的springboot版本,可以根据自身springboot版本进行选择
我这里用Hoxton版
<properties> <java.version>8</java.version> <spring-cloud.version>Hoxton.SR8</spring-cloud.version> </properties>
springboot版本
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.3.4.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent>
同时固定springcloud依赖版本
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
3.创建Eureka服务器项目
在上述案例的基础上,创建Eureka服务器,大体结构如下

其中common_cloud_1为公共资源,存放了其余项目的实体类以及其他共享资源
在eureka-server项目pom文件中
继承父项目
<parent>
<groupId>com.blb</groupId>
<artifactId>springcloud</artifactId>
<version>0.0.1-SNAPSHOT</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
引入依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
配置文件
server.port=8888
# 注册中心的地址
eureka.instance.hostname=127.0.0.1
# 是否拉取服务清单
eureka.client.fetch-registry=false
# 是否注册到eureka
eureka.client.register-with-eureka=false
# 定义注册中的服务地址
eureka.client.serviceUrl.defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka
启动类上加@EnableEurekaServer
@EnableEurekaServer
@SpringBootApplication
public class EurekaServerApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaServerApplication.class, args);
}
}
此时可以启动服务器项目,在浏览器中访问127.0.0.1:8888

4.配置Eureka客户端
同样继承父项目
引入依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
配置文件
# 服务名称 spring.application.name=order-service # 配置eureka客户端是否注册到eureka eureka.client.register-with-eureka=true # 拉取服务清单 eureka.client.fetch-registry=true # 注册中心地址 eureka.client.service-url.defaultZone=http://127.0.0.1:8888/eureka
启动类添加注解@EnableEurekaClient或@EnableDiscoveryClient
@EnableEurekaClient
@SpringBootApplication
public class OrderServiceApplication {
public static void main(String[] args) {
SpringApplication.run(OrderServiceApplication.class, args);
}
在RestTemplate配置类方法上加@LoadBalanced
/**
* 向容器提供HTTP客户端
* @return
*/
@LoadBalanced
@Bean
public RestTemplate restTemplate(){
return new RestTemplate();
}
对product-service项目重复上输操作
最后在调用服务时修改ip与端口为注册名
即localhost:8081改为product-service
@Override
public SysOrder getOrderById(Long id) {
SysOrder sysOrder = orderMapper.selectById(id);
SysProduct result = restTemplate.getForObject(
"http://product-service/productservice/sysProduct/product/" + sysOrder.getProductId(),
SysProduct.class);
sysOrder.setProduct(result);
return sysOrder;
}
启动两个客户端
再次访问127.0.0.1:8888

注册成功
再查询订单

调用成功,表示成功从注册中心获得ip与端口
四、Eureka高可用
注册中心如果出现问题就会导致服务全部不可用,可以配置多台Eureka服务器形成集群,提高注册中心的可用性。
application-one.properties
spring.application.name=eureka-one server.port=8888 # 注册中心的地址 eureka.instance.hostname=127.0.0.1 # 是否拉取服务清单 eureka.client.fetch-registry=true # 是否注册到eureka eureka.client.register-with-eureka=true # 定义注册中的服务地址 eureka.client.serviceUrl.defaultZone=http://127.0.0.1:8889/eureka,http://127.0.0.1:8890/eureka
application-two.properties
spring.application.name=eureka-three server.port=8890 # 注册中心的地址 eureka.instance.hostname=127.0.0.1 # 是否拉取服务清单 eureka.client.fetch-registry=true # 是否注册到eureka eureka.client.register-with-eureka=true # 定义注册中的服务地址 eureka.client.serviceUrl.defaultZone=http://127.0.0.1:8888/eureka,http://127.0.0.1:8889/eureka
application-two.properties
spring.application.name=eureka-two server.port=8889 # 注册中心的地址 eureka.instance.hostname=127.0.0.1 # 是否拉取服务清单 eureka.client.fetch-registry=true # 是否注册到eureka eureka.client.register-with-eureka=true # 定义注册中的服务地址 eureka.client.serviceUrl.defaultZone=http://127.0.0.1:8888/eureka,http://127.0.0.1:8890/eureka
启动这三台服务器
可以访问三台服务器的面板查看注册情况
同时还需要修改客户端配置
# 注册中心地址 eureka.client.service-url.defaultZone=http://127.0.0.1:8888/eureka,http://127.0.0.1:8889/eureka,http://127.0.0.1:8890/eureka
再次测试查询
SpringCloud是一系列框架的集合,简化了分布式系统开发,包括服务发现、配置中心等功能。微服务架构是独立服务的集合,通过轻量级通信协同工作。SpringCloud提供了如Eureka这样的服务注册与发现工具。文章通过一个简单的订单查询案例介绍了微服务间的调用,并展示了如何设置Eureka服务器和客户端,以及如何实现Eureka的高可用性。
1378

被折叠的 条评论
为什么被折叠?



