`
liujiekasini0312
  • 浏览: 147489 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

spring cloud微服务框架 第四天

 
阅读更多

第四天,在之前的章节,我们已经实现了配置服务器、注册服务器、微服务服务端,实现了服务注册与发现。这一章将实现微服务的客户端,以及联调、实现整个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
分享到:
评论

相关推荐

    spring cloud 微服务简单框架

    这个“spring cloud 微服务简单框架”包含了一个基础的微服务架构,包括服务提供者、服务消费者和服务中间转发等组件的源码。 1. **服务提供者**:在 Spring Cloud 中,服务提供者是拥有业务逻辑的应用程序,它们...

    Springcloud微服务框架.docx

    【SpringCloud微服务框架】 SpringCloud 是一套完整的微服务解决方案,它提供了服务发现、负载均衡、熔断机制、路由网关等一系列工具,帮助开发者构建分布式系统。本文将深入探讨SpringCloud中的服务调用原理、负载...

    SpringCloud第3季2024.7z

    SpringCloud是微服务架构中的一个核心框架,它提供了一套完整的解决方案,用于构建分布式系统,如服务发现、负载均衡、断路器、API网关、数据流处理等。本资源"SpringCloud第3季2024.7z"很可能包含的是关于Spring...

    从天气项目看Spring Cloud微服务治理

    ### 从天气项目看Spring Cloud微服务治理 #### Spring Cloud简介 Spring Cloud 是一套基于 Spring Boot 实现的微服务云应用开发框架,它利用 Spring Boot 的开发便利性巧妙地简化了分布式系统基础设施的开发,如...

    Java之 Spring Cloud 微服务搭建网关(第三个阶段)【一】.zip

    在本教程中,我们将深入探讨如何使用Spring Cloud构建微服务网关,这是Spring Cloud生态中的一个关键组件。Spring Cloud提供了一套工具集,用于简化分布式系统(如配置管理、服务发现、断路器、智能路由、微代理、...

    《深入理解Spring Cloud与微服务构建》word版本

    Spring Cloud作为目前最流行的微服务框架之一,它提供了大量的工具和服务,帮助开发者快速搭建分布式系统。该书可能涵盖了以下几个核心知识点: 1. **Spring Cloud简介**:Spring Cloud是基于Spring Boot的云应用...

    SpringCloud微服务接口查询Demo

    在"SpringCloud微服务接口查询Demo"中,我们主要探讨的是如何利用SpringCloud来实现微服务之间的接口查询和交互,以便更好地理解和监控服务的运行状态。 1. **服务注册与发现**: SpringCloud的核心组件之一是...

    《springcloud微服务实战》知识点评估试题.docx

    根据给定文件的信息,我们可以总结出以下几个与Spring Cloud微服务框架相关的知识点: ### 1. 服务熔断 **服务熔断**是一种重要的微服务架构中的保护机制,它主要用于防止因某一服务出现故障而导致整个系统崩溃的...

    基于layui+springcloud的企业级微服务框架

    仿百度能力开放平台的spring cloud 微服务框架 ,历经多家公司生产考验 1.用户权限 基于spring security jwt 的无session后台管理框架 2.注册中心 基于eureka的服务注册中心 提供动态上线下线功能 3 配置中心 集成...

    Spring Cloud微服务事务处理Demo

    在这个"Spring Cloud微服务事务处理Demo"中,我们将探讨如何在微服务环境中解决事务一致性问题。 首先,我们来看核心组件——Spring Boot。Spring Boot是基于Spring Framework的快速开发框架,它简化了Spring应用...

    《深入理解Spring Cloud与微服务构建》学习笔记(八)

    在《深入理解Spring Cloud与微服务构建》的学习笔记中,第八部分主要聚焦于如何使用Eureka来实现服务注册和发现。以下是一些核心知识点: 1. **Eureka Server**: 这是Eureka的核心组件,作为一个服务注册中心,它...

    Spring Cloud 微服务框架实战项目,含多版本教程及多种组件功能实现.zip

    2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; ...

    spring cloud 体系版本选型,涉及spring cloud alibaba spring boot spring cloud

    Spring Cloud作为一个广泛使用的微服务框架,其版本迭代迅速,每个版本都有其特定的功能特性和生命周期。以下将详细阐述如何进行Spring Cloud、Spring Boot以及Spring Cloud Alibaba的版本选型。 首先,让我们来看...

    基于SpringCloud微服务技术开发的“淘东”电商项目--taodong-shop.zip

    "基于SpringCloud微服务技术开发的“淘东”电商项目--taodong-shop"是一个全面展示微服务架构在电商领域应用的实际案例。SpringCloud作为Java生态中的微服务框架,为大型分布式应用程序提供了全面的服务发现、配置...

    SpringBoot+SpringCloud+nacos+gateway+mybatis搭建微服务

    4. Gateway:Spring Cloud Gateway是Spring Cloud官方推出的下一代API网关,用于替代Zuul。它提供路由、过滤、安全、限流等功能,是微服务架构中的流量入口,负责处理所有客户端请求,根据路由规则将请求转发到对应...

    springcloud视频学习

    3. 创建并部署第一个SpringCloud微服务:演示如何使用Spring Cloud Netflix Eureka创建服务注册中心,以及如何让其他微服务实例注册到这个中心。 4. 使用Spring Cloud Config实现配置管理:讲解如何通过Config ...

    java毕业设计&课设-SpringCloud微服务大型电商架构系统(视频+源码+资料).doc

    #### 一、Spring Cloud 微服务架构概览 在当前互联网技术快速发展的背景下,传统的单体架构已经难以满足日益增长的业务需求。为了解决这一问题,微服务架构应运而生。Spring Cloud 作为一款基于 Spring Boot 实现的...

    7天学会spring cloud教程.pdf.zip

    《7天学会Spring Cloud教程》是一本专注于快速掌握微服务框架Spring Cloud的实践指南。Spring Cloud作为Java领域的主流微服务框架,为企业级分布式应用提供了全面的解决方案,包括服务发现、配置中心、负载均衡、...

    深入理解Spring Cloud与微服务构建 方志朋 高清pdf

    Spring Cloud 是一套基于 Spring Boot 实现的微服务云应用开发框架。它提供了构建分布式系统中服务治理、配置管理、消息总线、负载均衡、断路器、数据监控等工具。Spring Cloud 的目标是让开发者能够快速地搭建出...

    springboot springcloud 构建 微服务

    在IT行业中,微服务架构已经成为了现代应用开发的主流趋势,Spring Boot和Spring Cloud作为Java生态中的两大神器,为构建微服务提供了强大的支持。本文将深入探讨如何利用Spring Boot和Spring Cloud来构建微服务。 ...

Global site tag (gtag.js) - Google Analytics