spring cloud微服务架构入门搭建

这里写自定义目录标题

  • spring cloud微服务架构入门搭建
    • Spring Cloud是快速构建分布式系统的工具集

spring cloud微服务架构入门搭建

spring cloud微服务架构入门搭建_第1张图片
James Lewis是ThoughtWorks的首席顾问,也是技术顾问委员会的成员。James利用小型协作服务构建应用程序的兴趣源于大规模集成企业系统的背景。他使用微服务构建了许多系统,并且几年来一直积极参与不断发展的社区。

spring cloud微服务架构入门搭建_第2张图片
Martin Fowler是一位关于软件开发的作者,演讲者和一般的嗓音。他长期以来一直对如何组装软件系统的问题感到困惑,他听到的声明比他满意的更加模糊。他希望微服务能够实现其倡导者所发现的早期承诺。
https://www.martinfowler.com/articles/microservices.html
“微服务” - 在拥挤的软件架构街道上又一个新名词。虽然我们的自然倾向是通过轻蔑的眼神传递这些东西,但这一点术语描述了我们发现越来越有吸引力的软件系统风格。我们已经看到许多项目在过去几年中使用了这种风格,到目前为止的结果是积极的,以至于对于我们的许多同事来说,这已成为构建企业应用程序的默认样式。然而,遗憾的是,没有太多信息可以概述微服务的风格以及如何实现。
“微服务” - 在软件架构拥挤的街道上又一个新名词。 尽管我们的自然倾向是以轻蔑的眼光来传递这样的东西,但这些术语描述了一种我们发现越来越吸引人的软件系统风格。 我们已经看到许多项目在过去几年中都采用了这种风格,迄今为止的结果是积极的,因此对于我们的许多同事来说,这正成为构建企业应用程序的默认风格。 可悲的是,没有太多的信息概述了微服务的风格以及如何去做。
– 出自Google翻译 –

简而言之,微服务架构风格[1]是一种将单个应用程序开发为一套小型服务的方法,每个小型服务都在自己的流程中运行,并与轻量级机制(通常是HTTP资源API)进行通信。这些服务围绕业务功能构建,可通过全自动部署机制独立部署。这些服务至少集中管理,可以用不同的编程语言编写,并使用不同的数据存储技术。

简而言之,微服务架构风格[1]是一种将单个应用程序作为一套小型服务开发的方法,每种应用程序都在其自己的进程中运行,并与轻量级机制(通常是HTTP资源API)进行通信。 这些服务是围绕业务功能构建的,可以通过全自动部署机制独立部署。 这些服务的集中管理最少,可以用不同的编程语言编写,并使用不同的数据存储技术。 

– 出自Google翻译 –

分散数据管理
去中心化数据管理
组件能针对不同的业务特点选择不同的存储技术

spring cloud微服务架构入门搭建_第3张图片

Spring Cloud是快速构建分布式系统的工具集

spring cloud微服务架构入门搭建_第4张图片
Eureka Server服务注册中心

	
            org.springframework.cloud
            spring-cloud-starter-eureka-server
        
@EnableEurekaServer      //@EnableEurekaServer 表示当前应用为服务注册中心
@SpringBootApplication
public class EurekaServerApplication {

    public static void main(String[] args) {
        SpringApplication.run(EurekaServerApplication.class, args);
    }
}
#配置application.yml
eureka:
    client:
        register-with-eureka: false   #表示是否需要将自己注册到注册中心
        fetch-registry: false  # 是否向注册中心定时更新自己状态

Eureka client服务注册者

	
            org.springframework.cloud
            spring-cloud-starter-netflix-eureka-client
        

        
            org.springframework.boot
            spring-boot-starter-web
        
@EnableDiscoveryClient  // 表示当前应用需要注册到注册中心
@SpringBootApplication
public class EurekaClientApplication {

    public static void main(String[] args) {
        SpringApplication.run(EurekaClientApplication.class, args);
    }
}
#配置application.yml
eureka:
    client:
        register-with-eureka: true	#表示是否需要将自己注册到注册中心
        fetch-registry: true		# 是否向注册中心定时更新自己状态
        service-url:
     		defaultZone: http://localhost:8761/eureka   #注册中心地址

注册中心的高可用性
spring cloud微服务架构入门搭建_第5张图片
微服务概念形态
spring cloud微服务架构入门搭建_第6张图片

服务消费者 Feign

	
            org.springframework.cloud
            spring-cloud-starter-openfeign
        
@EnableDiscoveryClient
@EnableFeignClients  //表示当前应用可以调用其他服务
@SpringBootApplication
public class EurekafeignApplication {

    public static void main(String[] args) {
        SpringApplication.run(EurekafeignApplication.class, args);
    }
}
@FeignClient("servicename")
public interface FeignService {

    @GetMapping("/xxx")
    public String xxx();
}

@FeignClient: 表示要调用的服务,值为服务名称
当前类声明为接口
声明的方法和被调用的服务接口方法一致
通过@Autowired 声明并使用此服务
spring cloud微服务架构入门搭建_第7张图片

网关 API Gateway
spring cloud微服务架构入门搭建_第8张图片

API网关

	
            org.springframework.cloud
            spring-cloud-starter-netflix-eureka-client
        
        
            org.springframework.cloud
            spring-cloud-starter-netflix-zuul
        
@EnableZuulProxy  //表示当前应用是网关路由
@SpringBootApplication
public class GatewayApplication {

    public static void main(String[] args) {
        SpringApplication.run(GatewayApplication.class, args);
    }
}
zuul:
    routes:
        #分发到a服务
        a.path: /a/**  #分流哪些路径
        a.serviceId: a-service  #服务的名称
        a.retryable: true  #是否重试
        #分发到b服务
        b.path: /b/**
        b.serviceId: b-service
        b.retryable: true
    host:
        connect-timeout-millis: 30000 #连接超时
        socket-timeout-millis: 30000  #响应超时

spring cloud微服务架构入门搭建_第9张图片

Hystrix Dashboard 断路器
在微服务架构中为例保证程序的可用性,防止程序出错导致网络阻塞,出现了断路器模型。断路器的状况反应了一个程序的可用性和健壮性,它是一个重要指标。Hystrix Dashboard是作为断路器状态的一个组件,提供了数据监控和友好的图形化界面。

	
            org.springframework.cloud
            spring-cloud-starter-hystrix-dashboard
        
        
            org.springframework.cloud
            spring-cloud-starter-hystrix
        
        
            org.springframework.boot
            spring-boot-starter-actuator
            1.5.3.RELEASE
        
feign:
  hystrix:
    enabled: true
//在程序的入口ServiceHiApplication类,加上@EnableHystrix注解开启断路器,这个是必须的,并且需要在程序中声明断路点HystrixCommand;
//加上@EnableHystrixDashboard注解,开启HystrixDashboard
@EnableDiscoveryClient
@EnableHystrix
@EnableHystrixDashboard
@EnableFeignClients
@SpringBootApplication
public class Feign01Application {

    public static void main(String[] args) {
        SpringApplication.run(Feign01Application.class, args);
    }
}
@FeignClient(value = "clh",fallback = DevCLHImpl.class)  //需要创建DevCLH 的实现类DevCLHImpl 并实现对应方法
public interface DevCLH {
    @RequestMapping("/dev01")
    public String dev01();
}

打开http://localhost:8762/actuator/hystrix.stream,可以看到一些具体的数据:

data: {"type":"HystrixCommand","name":"DevCLH#dev01()","group":"clh","currentTime":1543753091734,"isCircuitBreakerOpen":false,"errorPercentage":0,"errorCount":0,"requestCount":0,"rollingCountBadRequests":0,"rollingCountCollapsedRequests":0,"rollingCountEmit":0,"rollingCountExceptionsThrown":0,"rollingCountFailure":0,"rollingCountFallbackEmit":0,"rollingCountFallbackFailure":0,"rollingCountFallbackMissing":0,"rollingCountFallbackRejection":0,"rollingCountFallbackSuccess":0,"rollingCountResponsesFromCache":0,"rollingCountSemaphoreRejected":0,"rollingCountShortCircuited":0,"rollingCountSuccess":0,"rollingCountThreadPoolRejected":0,"rollingCountTimeout":0,"currentConcurrentExecutionCount":0,"rollingMaxConcurrentExecutionCount":0,"latencyExecute_mean":0,"latencyExecute":{"0":0,"25":0,"50":0,"75":0,"90":0,"95":0,"99":0,"99.5":0,"100":0},"latencyTotal_mean":0,"latencyTotal":{"0":0,"25":0,"50":0,"75":0,"90":0,"95":0,"99":0,"99.5":0,"100":0},"propertyValue_circuitBreakerRequestVolumeThreshold":20,"propertyValue_circuitBreakerSleepWindowInMilliseconds":5000,"propertyValue_circuitBreakerErrorThresholdPercentage":50,"propertyValue_circuitBreakerForceOpen":false,"propertyValue_circuitBreakerForceClosed":false,"propertyValue_circuitBreakerEnabled":true,"propertyValue_executionIsolationStrategy":"THREAD","propertyValue_executionIsolationThreadTimeoutInMilliseconds":1000,"propertyValue_executionTimeoutInMilliseconds":1000,"propertyValue_executionIsolationThreadInterruptOnTimeout":true,"propertyValue_executionIsolationThreadPoolKeyOverride":null,"propertyValue_executionIsolationSemaphoreMaxConcurrentRequests":10,"propertyValue_fallbackIsolationSemaphoreMaxConcurrentRequests":10,"propertyValue_metricsRollingStatisticalWindowInMilliseconds":10000,"propertyValue_requestCacheEnabled":true,"propertyValue_requestLogEnabled":true,"reportingHosts":1,"threadPool":"clh"}

data: {"type":"HystrixThreadPool","name":"clh","currentTime":1543753091734,"currentActiveCount":0,"currentCompletedTaskCount":57,"currentCorePoolSize":10,"currentLargestPoolSize":10,"currentMaximumPoolSize":10,"currentPoolSize":10,"currentQueueSize":0,"currentTaskCount":57,"rollingCountThreadsExecuted":0,"rollingMaxActiveThreads":0,"rollingCountCommandRejections":0,"propertyValue_queueSizeRejectionThreshold":5,"propertyValue_metricsRollingStatisticalWindowInMilliseconds":10000,"reportingHosts":1}

ping:

打开localhost:8762/hystrix 可以看见以下界面:
spring cloud微服务架构入门搭建_第10张图片
在界面依次输入:http://localhost:8762/actuator/hystrix.stream 、2000 、miya
;点确定。

在另一个窗口输入: http://localhost:8762/hi?name=forezp

重新刷新hystrix.stream网页,你会看到良好的图形化界面:
spring cloud微服务架构入门搭建_第11张图片

你可能感兴趣的:(spring,cloud,微服务)