基于Spring Cloud的微服务实现

    微服务作为当前的流行架构设计,Spring Cloud通过与Spring的集成使微服务的应用更为简便。在Spring Cloud中集成了Netflix的多个开源组件,再通过Spring Boot的注解调用实现插件式的功能调用。

初步架构设计图



 

 

1、注册中心-Eureka

  提供服务的动态注册、发现

  启用Eureka,在pom中添加

<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-eureka-server</artifactId>
</dependency>

  服务主类中添加@EnableEurekaServer注解即可

  指定端口 server.port=8761

  访问服务:



 在此能看观察到该注册中心的所有已注册服务

2、Rest服务-Spring Boot

  Rest服务是普通的Spring Boot构建的web应用,通过@RestController注解发布

  在配置文件中指定注册中心

eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/

   服务主类中通过@EnableDiscoveryClient注解在Eureka中注册服务

DiscoveryClient_BIZ-SERVICE/192.168.133.1:biz-service:8888: registering service...
DiscoveryClient_BIZ-SERVICE/192.168.133.1:biz-service:8888 - registration status: 204

3、Api网关-Zuul

  url的重写:在微服务的实现中通常服务端不会直接暴露于外部调用中,只表现为一些私有服务

  服务过滤:选择服务可为客户端调用

  授权:限制资源的访问

  Zuul是Netflix的网关实现,Zuul使用Eureka做服务发现,使用Ribbon做负载均衡,在pom中引入依赖

<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-zuul</artifactId>
</dependency>
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>

   在主类中指定@EnableZuulProxy @EnableDiscoveryClient

  配置文件设置

zuul:
  routes:
    biz-service:
      service-id: biz-service
      path: /book/**
      strip-prefix: false #设置为false 重定向是带book,否则则反
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/

4、服务监控-Hystrix

   在微服务中需要查看服务的运行状态,可以通过Hystrix实现服务监控

   pom中引入依赖

<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-hystrix-dashboard</artifactId>
</dependency>

   服务主类中引入@EnableHystrixDashboard注解

   需要监控的服务项目中(biz-service)引入hystrix  

<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-hystrix</artifactId>
</dependency>

   指定监控的方法

  

	@HystrixCommand(fallbackMethod = "queryDefaultFallback")
	public List<?> queryAllBook() {
		return BizController.bookList;
	}

	public List<?> queryDefaultFallback() { //服务失败后的请求
		return new ArrayList<>();
	}

   hystrix只能对一个微服务进行监控,实践中需要监控多个微服务中的方法调用,可以使用turbine组件

   pom中的依赖为

<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-turbine</artifactId>
</dependency>

  turbine配置文件中指定监控的项目

turbine:
  cluster-name-expression: new String('default')
  app-config: biz-service, customer-service

  

  另外在同一机器上需要指定不同的域名,在此使用biz-service及customer-service作为测试样例

  bizi项目中的配置  

eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/
  instance:
    hostname: peer1

  customer项目的配置  

eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka  
  instance:
    hostname: peer2

  访问http://localhost:8555/hystrix


  输入监控的url:http://localhost:8555/turbine.stream,访问监控的方法

  http://localhost:8888/book/queryAll

  http://localhost:8880/customer/queryAll

  可以看到监控结果:



 

项目完整代码地址:https://github.com/hjguang/spring-cloud.git

猜你喜欢

转载自theseus.iteye.com/blog/2404286