在之前的章节,我们已经实现了配置服务器、注册服务器、微服务服务端,实现了服务注册与发现。这一章将实现微服务的客户端,以及联调、实现整个spring cloud框架核心应用。
本文属于《7天学会spring cloud系列》之五,涉及到的项目包括:
开源项目:http://git.oschina.net/zhou666/spring-cloud-7simple
- cloud-config-server:配置服务器
- cloud-eureka-server:eureka注册服务器
- cloud-simple-service:一个使用mybatis的数据库应用,服务端
- cloud-simple-ui:webui客户端
我们先来看看如何实现webui客户 端。在spring boot中,已经不推荐使用jsp,所以你如果使用jsp来实现webui端,将会很麻烦。这可能跟现在的开发主流偏重移动端有关,跟微服务有关,跟整个 时代当前的技术需求有关。单纯以html来作为客户端,有很多好处,比如更利于使用高速缓存;使后台服务无状态话,更利于处理高并发;更利于页面作为服 务,小服务组合成大服务等。
我们首选来创建webui应用,参考git cloud-simple-ui工程:
这个应用包括前端html页面,还包括一个后台controller浅层。这是一个前端应用,为什么要包括controller浅层?这是因为这个 controller浅层是用来做服务组合的,因为一个页面可能涉及到调用多个服务,而这些服务又有可能涉及事务和并发问题,所以还是需要靠java来完 成。当然,也可以单独编写一个api gateway来实现这一层,可以使用go、node.js语言等,也可以使用java/netty(主流还是java,因为开发部署效率高)。
Controller层的WebApplication就是这个应用的入口,代码如下:
@SpringBootApplication
@EnableEurekaClient
@EnableHystrix
public class WebApplication {
public static void main(String[] args) throws Exception {
SpringApplication.run(WebApplication.class, args);
}
}
这些注解大都在前面提到过用法:
@SpringBootApplication相当于@Configuration、@EnableAutoConfiguration、@ComponentScan三个注解合用。
@EnableEurekaClient配置本应用将使用服务注册和服务发现,注意:注册和发现用这一个注解。
@EnableHystrix表示启用断路器,断路器依赖于服务注册和发现。
Controller层的service包封装了服务接口访问,UserService类代码如下:
@Service
public class UserService {
@Autowired
RestTemplate restTemplate;
final String SERVICE_NAME="cloud-simple-service";
@HystrixCommand(fallbackMethod = "fallbackSearchAll")
public List<User> searchAll() {
return restTemplate.getForObject("http://"+SERVICE_NAME+"/user", List.class);
}
private List<User> fallbackSearchAll() {
System.out.println("HystrixCommand fallbackMethod handle!");
List<User> ls = new ArrayList<User>();
User user = new User();
user.setUsername("TestHystrix");
ls.add(user);
return ls;
}
}
这里使用了断路器,就是 @HystrixCommand注解。断路器的基本作用就是@HystrixCommand注解的方法失败后,系统将自动切换到 fallbackMethod方法执行。断路器Hystrix具备回退机制、请求缓存和请求打包以及监控和配置等功能,在这里我们只是使用了它的核心功 能:回退机制,使用该功能允许你快速失败并迅速恢复或者回退并优雅降级。
这里使用restTemplate进 行服务调用,因为使用了服务注册和发现,所以我们只需要传入服务名称SERVICE_NAME作为url的根路径,如此restTemplate就会去 EurekaServer查找服务名称所代表的服务并调用。而这个服务名称就是在服务提供端cloud-simple-service中 spring.application.name所配置的名字,这个名字在服务启动时连同它的IP和端口号都注册到了EurekaServer。
封装好服务调用后,你只需要在Controller类里面注入这个服务即可:
@RestController
public class UserController {
@Autowired
UserService userService;
@RequestMapping(value="/users")
public ResponseEntity<List<User>> readUserInfo(){
List<User> users=userService.searchAll();
return new ResponseEntity<List<User>>(users,HttpStatus.OK);
}
}
至此这个webui应用的java端就开发完了,我们再来看页面模块。
可以看到,页面文件都放在 resources\static目录下面,这是spring boot默认的页面文件主文件夹,你如果在里面放一个index.html,那么直接访问根路径http://localhost:8080/会直接定位 到这个页面。所以这个static就相当于传统web项目里面的webapp文件夹。
在这里包括两个页面index.html和user-page.html,用户访问首页时将会加载user-page.html子页面。
首页index.html页面核心代码如下:
<html ng-app="users">
<head>
<script src="js/app.js"></script>
</head>
<body>
<div ng-view class="container">
</div>
</body>
</html>
页面user-page.html代码如下:
<div>
<ul ng-controller="userCtr">
<li ng-repeat="item in userList">
{{item.username}}
</li>
</ul>
</div>
app.js页面代码如下:
angular.module('users', ['ngRoute']).config(function ($routeProvider) {
$routeProvider.when('/', {
templateUrl: 'user-page.html',
controller: 'userCtr'
})
}).controller('userCtr', function ($scope, $http) {
$http.get('users').success(function (data) {
//alert(data+"");
$scope.userList = data;
});
});
这里使用了angularJS库。 Angular可以绑定模型数据到页面变量,在user-page.html看到的{{item.username}}就是它的绑定语法,这个语法根 jsp或freemarker这些模板技术都类似,只不过Angular是用在客户端的,而前者是用在服务端的。
至此这个webui应用就开发完了,改一下配置文件和pom文件就可以运行了。配置文件包括配置管理服务器地址,注册服务器地址等,在bootstrap.properties文件中:
spring.cloud.config.uri=http://127.0.0.1:${config.port:8888}
spring.cloud.config.name=cloud-config
spring.cloud.config.profile=${config.profile:dev}
eureka.client.serviceUrl.defaultZone=http\://localhost\:8761/eureka/
spring.application.name=simple-ui-phone
这些配置我们在上一章已经提到过了,这里不再解释。因为使用了断路器,所以相比上一章的cloud-simple-service项目,需要加入hystrix依赖,只有一个starter依赖:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-hystrix</artifactId>
</dependency>
Spring把事情做的如此简单,不管是服务注册还是断路器,连同注解加配置文件再加上依赖总共不超过十行代码。如此简单就可以使用一个分布式应用,也难怪国内外业内人员都高度重视这个框架,在简单和速度就是硬道理的今天,这个框架有着重要的意义。
剩下最重要的事情就是进行部署了,我们以此使用命令启动这些服务及应用:
1) java -jar cloud-config-server-0.0.1.jar,启动配置服务器,固定绑定端口8888;
2) java -jar cloud-eureka-server-1.0.0.jar,启动注册服务器,固定绑定端口8671;
3) java -jar cloud-simple-service-1.0.0.jar --server.port=8081 >log8081.log,启动后台服务,绑定端口8081
4) java -jar cloud-simple-service-1.0.0.jar --server.port=8082 >log8082.log,启动后台服务,绑定端口8082
5) java -jar cloud-simple-ui-1.0.0.jar --server.port=8080 >log8080.log,启动前端ui应用,绑定端口8080
运行http://localhost:8080/即可看到运行的结果。其中“>log8080.log”表示输出日志到文件。
这里运行了两个cloud- simple-service实例,主要是为了演示ribbon负载均衡。默认情况下使用ribbon不需要再作任何配置,不过它依赖于注册服务器。当然 也可以对ribbon进行一些自定义设置,比如配置它的超时时间、重试次数等。启用了负载均衡后,当我们关掉前端页面上次指向的服务时(从日志中看),比 如我们刷新页面看到它调用的是8081服务,那么我们关掉这个服务。关掉后再刷新会发现执行了断路器,过几秒再刷新,它已经切换到了8082这台服务器, 这说明负载均衡起作用了。
相关推荐
目的: 综合应用 spring cloud进行微服务架构开发。 开发环境 操作系统 : windows Java环境 : JDK1.8(不能使用高版本) 开发工具 : Idea 2020 数据库: mysql 5.5以上 spring cloud : Greenwich.SR2 spring boot :...
微服务毕业论文管理系统体现出MIS的一个总体设计思想,实现基于SSM框架,综合地应用了 MySQL、Java等技术,最大程度上满足学生对自己所需资料的相关操作及管理员对毕业论文进行管理功能,极大地提升相关工作效率。...
总的来说,"基于SpringCloud的微服务乐优商城"是一个综合性的电商解决方案,展示了如何运用微服务架构解决复杂业务场景,同时也体现了持续优化和修复bug对于项目成功的重要性。对于想要深入学习Spring Cloud和微服务...
SpringCloud是基于Spring Boot实现的一套微服务解决方案,它为开发者提供了快速构建分布式系统(如配置管理、服务发现、断路器、智能路由、微代理、控制总线等)所需的各种功能。 三、核心组件 1. Spring Cloud ...
"spring cloud微服务项目"的标题表明这是一个使用Spring Cloud来开发的微服务架构应用实例,而描述中的"比较完美实例"暗示了这是一个相对完善的示例项目,可能包含了多种微服务组件的综合运用。 首先,我们要理解...
Spring Cloud微服务落地是一个涉及微服务架构理念、Spring Cloud相关技术栈以及企业级应用实践的综合话题。从文件内容来看,文章主要围绕京东金融在微服务方面的实践和心得,重点阐述了微服务从起步到实践的各个阶段...
SpringCloud是基于Spring Boot进行构建的云应用开发工具集,它...此外,还会涉及SpringBoot的基础知识,帮助初学者快速上手SpringCloud微服务开发。学习完本教程,开发者将有能力独立设计和实现一套完整的微服务架构。
【标题】:“基于SpringCloud+Kubernetes,微服务”这一主题涵盖了现代云原生应用的构建与部署方式,主要关注的是使用Spring Cloud构建微服务架构,并结合Kubernetes进行容器编排与管理。Spring Cloud作为Java领域的...
微服务体系自媒体实战视频课程,完整版26章!提供配套的源码下载! Spring Cloud 进阶 Alibaba ...掌握主流后端技术栈:Spring Cloud+MongoDB+Redis+RabbitMQ等应用,获得微服务、分布式、项目和微架构综合实战经验。
该PDF文件收录了丰富的面试题目和详细的答案解析,涵盖了Spring Cloud微服务架构的各个方面,从基础概念到实际应用,全面而系统地覆盖了Spring Cloud技术栈的核心知识点。 ### 内容特点: 1. **全面涵盖**:该PDF...
标题中的“基于SpringCloud的微服务分布式新生报到系统源码”揭示了这是一个使用SpringCloud构建的微服务架构,主要用于实现新生报到的功能。SpringCloud是Java开发人员广泛使用的工具集,它为开发者提供了在分布式...
### Spring Cloud 微服务架构详解 #### 一、微服务入门 ...以上就是Spring Cloud微服务架构的相关知识点介绍。通过本篇文章的学习,希望读者能够对微服务架构有一个全面深入的理解,并能够在实际项目中灵活运用。
- **[中小型互联网公司微服务实践-经验和教训](http://www.ityouknow.com/springcloud/2017/10/19/micro-service-practice.html)** - **[从架构演进的角度聊聊Spring Cloud都做了些什么?]...
Spring Cloud 是一个基于 Spring Boot 实现的云应用开发工具集,它为开发者...总的来说,通过深入学习和操作这个“springcloud综合小案例”,你将具备构建和管理微服务系统的基础能力,进一步提升你的 IT 专业技能。
总结,Aizuji项目是一个综合运用了SpringCloud核心组件的电商平台,通过微服务架构实现了高可用、高扩展性的手机租赁服务。理解并掌握这些技术,对于提升电商平台的稳定性和用户体验具有重要意义。
综上所述,Spring Cloud微服务群实例是一个综合的微服务解决方案,通过Eureka实现服务注册与发现,Zuul作为API网关处理请求,YWT可能是开发者定制的工具集,所有这些组件共同构建了一个高效、稳定的微服务生态系统。...
【标题】"基于SpringBoot,SpringCloud的微服务大型在线学习平台"是一个综合性的项目,旨在构建一个使用Java技术栈的、基于微服务架构的在线教育平台。该项目利用了SpringBoot和SpringCloud这两个核心框架,旨在实现...
总之,基于SpringCloud的微服务系统设计是一门综合性的艺术,它涉及到技术选型、架构设计、流程优化等多个方面。只有深入理解微服务的核心理念,灵活应对各种挑战,才能构建出高效、稳定的微服务系统,满足互联网...