2019独角兽企业重金招聘Python工程师标准>>>

Spring Cloud构建微服务 博客分类: 微服务 spring boot 架构

首先了解下项目结构

请忽略config-service,这里先不说这个

pom.xml配置

<!--这里只写出比较重要的配置,模组依赖的配置这里就不写了,不明白的可以先看看maven相关知识-->
<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency>
</dependencies><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>Brixton.RELEASE</version><type>pom</type><scope>import</scope></dependency></dependencies>
</dependencyManagement>

discovery-service

discovery-service目录结构如下,主要就是一个Java类,外加两个yml配置文件

DiscoveryApplication.java 内容如下 注解SpringBootApplication是@Configuration @EnableAutoConfiguration @ComponentScan三个注解的集合 注解EnableEurekaServer表明这是一个Eureka Server,用于服务的注册

@SpringBootApplication
@EnableEurekaServer
public class DiscoveryApplication {public static void main(String[] args) {SpringApplication.run(DiscoveryApplication.class,args);}
}

bootstrap.yml配置如下,这里只配置了服务的名字叫 discovery

spring:application:name: discovery
application.yml配置如下
server.port配置了tomcat的启动端口,eureka实例的名字,以及eureka其他配置。因为我们这里是eureka服务端,
register-with-eureka配置为false,这个配置表示是否将其本身注册到eureka server以被其他发现
fetch-registry配置为false,这个配置表示是否需要从eureka server中抓取eureka上的注册信息
defaultZone 默认地址为 http://localhost:8761/eureak
server:port: 8761eureka:instance:hostname: discoveryclient:register-with-eureka: falsefetch-registry: falseservice-url:defaultZone: http://discovery:${server.port}/eureka/spring.cloud.config.discovery.enabled: true

category-service

category-service 目录结构大致如下,这里我们主要说明下CategoryController.java、CategoryApplication.java、
application.yml、bootstrap.yml的内容。

CategoryController.java内容如下,主要就是对外提供服务,通过访问地址 /v1/category
@RestController
@RequestMapping("/v1")
public class CategoryController {private static final Logger LOGGER = LoggerFactory.getLogger(CategoryController.class);@AutowiredCategoryService categoryService;@RequestMapping("/category")public List<Category> getCategory() {LOGGER.info("哇塞~鸟人哎哎哎哎");return categoryService.getCategory();}
}
CategoryApplication.java主要内容如下,最重要的就是@EnableEurekaClient表示这是个eureka client,这个应用
将会被注册到eureka server,这个应用的端口是什么?注册到哪个eureka server?带着这些疑问,待会我们看application.yml
@SpringBootApplication
@EnableEurekaClient
public class CategoryApplication {public static void main(String[] args) {SpringApplication.run(CategoryApplication.class,args);}
}
application.yml如下,server.port配置的端口为0表明启动这个项目之后,会自动为其分配一个可用端口,如果我们把这个应用
打成一个可执行jar包,在不重新指定端口的情况下,只会有一个程序能正常工作哦。
defaultZone 指明了该服务注册的地址,服务将会被注册到这个地址上
ribbon.eureka.enabled 默认情况即为true,这里不配置也无所谓
server:port: 0eureka:client:serviceUrl:defaultZone: http://discovery:8761/eureka/
instance:preferIpAddress: trueribbon:eureka:enabled: true
bootstrap.yml配置如下,这里配置了服务的名字叫catelog-service,其他啥都没有哦
spring:application:name: catalog-service

gateway-service

gateway-service项目结构如下,gateway主要是为了统一暴露接口而生,服务众多的情况下,对前端来讲,我不需要记住那么多的域名
地址来调用API,我需要记住的只是gateway的地址就行。

Application.java内容如下,最主要的其实就是@EnableSidecar,这个东西他提供了一个jsp页面。通过这个页面我们可以知道
gateway以及其他在eureka server上注册的服务的健康状况,并且这个注解包含了@EnableZuulProxy,所以呢,它也支持软
负载均衡,如果启动多个服务,通过gateway来调用这个接口,多次调用我们会发现,请求会落在不同的服务上
@SpringBootApplication
@EnableSidecar
public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);}
}
application.yml如下,里面主要多了一个endpoints配置和sidecar的端口配置,endpoints是为了监控系统才有的配置,
具体可以参看AbstractEndpoint.java的实现类。sidecar的端口这里配置的是80,其他端口也是可以的
bootstrap.yml就不提了,因为里面只有服务的名字,和上面的类似
server:port: 10000endpoints:restart:enabled: trueshutdown:enabled: truehealth:sensitive: falseeureka:instance:hostname: gatewayclient:registerWithEureka: truefetchRegistry: trueserviceUrl:defaultZone: http://discovery:8761/eureka/
sidecar:port: 80

如何查看服务的健康状况?

答: 就本例来说,我们访问地址http://gateway:10000/来了解gateway的情况,如果要知道catelog-service的情况我们就访问http://gateway:10000/hosts/catalog-service地址。hosts后面跟我们的服务的名字即可

spring boot如何创建一个可执行的jar包

答:在服务端的pom文件中增加插件spring-boot-maven-plugin。参考文档http://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/

如何通过gateway来访问其他服务

答:举例,如果我们要通过gateway来访问catalog-service服务,那么我在浏览器里面输入http://gateway:10000/catalog-service/v1/category这里的/v1/category是由catalog-servicel来决定的,catalog-service则是服务的名字

PS: 一些截图

参考文档

【1】http://jinnianshilongnian.iteye.com/blog/1902886
【2】http://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/

http://my.oschina.net/openforce/blog/680941

转载于:https://my.oschina.net/xiaominmin/blog/1599067

Spring Cloud构建微服务相关推荐

  1. Spring Cloud构建微服务架构:分布式服务跟踪(整合zipkin)【Dalston版】

    通过上一篇<分布式服务跟踪(整合logstash)>,我们虽然已经能够利用ELK平台提供的收集.存储.搜索等强大功能,对跟踪信息的管理和使用已经变得非常便利.但是,在ELK平台中的数据分析 ...

  2. Spring Cloud构建微服务架构:分布式服务跟踪(整合logstash)【Dalston版】

    通过之前的<入门示例>,我们已经为两个由SpringCloud构建的微服务项目 trace-1和 trace-2引入了Spring Cloud Sleuth的基础模块 spring-clo ...

  3. Spring Cloud构建微服务架构:分布式服务跟踪(跟踪原理)

    通过上一篇<分布式服务跟踪(入门)>的例子,我们已经通过Spring Cloud Sleuth往微服务应用中添加了实现分布式跟踪具备的基本要素.下面通过本文来详细说说实现分布式服务跟踪的一 ...

  4. Spring Cloud构建微服务架构:服务容错保护(Hystrix断路器)

    断路器 断路器模式源于Martin Fowler的Circuit Breaker一文."断路器"本身是一种开关装置,用于在电路上保护线路过载,当线路中有电器发生短路时," ...

  5. Spring Cloud构建微服务架构(七)消息总线(续:Kafka)

    Spring Cloud Bus除了支持RabbitMQ的自动化配置之外,还支持现在被广泛应用的Kafka.在本文中,我们将搭建一个Kafka的本地环境,并通过它来尝试使用Spring Cloud B ...

  6. Spring Cloud构建微服务架构(五)服务网关

    通过之前几篇Spring Cloud中几个核心组件的介绍,我们已经可以构建一个简略的(不够完善)微服务架构了.比如下图所示: alt 我们使用Spring Cloud Netflix中的Eureka实 ...

  7. Spring Cloud构建微服务架构:分布式配置中心【Dalston版】

    Spring Cloud Config是Spring Cloud团队创建的一个全新项目,用来为分布式系统中的基础设施和微服务应用提供集中化的外部配置支持,它分为服务端与客户端两个部分.其中服务端也称为 ...

  8. Spring Cloud构建微服务架构:服务容错保护(Hystrix服务降级)【Dalston版】

    前言 在微服务架构中,我们将系统拆分成了一个个的服务单元,各单元应用间通过服务注册与订阅的方式互相依赖.由于每个单元都在不同的进程中运行,依赖通过远程调用的方式执行,这样就有可能因为网络原因或是依赖服 ...

  9. Spring Cloud构建微服务架构:服务容错保护(Hystrix依赖隔离)【Dalston版】

    前言 在上一篇<Spring Cloud构建微服务架构:服务容错保护(Hystrix服务降级)>中,我们已经体验了如何使用@HystrixCommand来为一个依赖资源定义服务降级逻辑.实 ...

最新文章

  1. java 调用mysql存储过程
  2. Java高级面试题!java构造方法的作用和特点
  3. 【Demo 0011】多媒体播放器
  4. Java从零开始学三(public class和class)
  5. NGS中的一些软件功能介绍
  6. java 的strip_javastript
  7. 泪目了,一位轮椅上的清华博士师兄
  8. 数据分析初试:“梧桐杯”中国移动大数据应用创新大赛 - 智慧城市赛道
  9. (附源码)springboot社区文明养宠平台 毕业设计 231609
  10. python中如何判断大小写_用python如何判断字符的大小写
  11. mysql高级教程(一)
  12. 硬也是一种态度!原来随身WIFI还能这么玩
  13. think-swoole简易使用教程--websocket
  14. Golang - bufio 包
  15. 第三方网站登录微信——保姆级
  16. 《保护我们的数字遗产:DNA数据存储》白皮书发布
  17. php文字外链,锚文本外链如何制作?
  18. LiDAR 5 相控阵激光雷达 (OPA LiDAR)
  19. JS屏蔽某地区(城市)访问网站
  20. MATLAB imshow 几种用法的不同

热门文章

  1. Unable to resolve target 'android-5'
  2. TensorFlow使用CNN实现中文文本分类
  3. conda重命名环境env
  4. Oracle获取月初/月末/季初/季末/半年初/半年末/年初/年末
  5. Traefik访问master节点不通的问题定位
  6. [bzoj4922]Karp-de-Chant Number
  7. python:how does subclass call baseclass's __init__()
  8. operator new,new operator,placement new的区别
  9. VS2003转VS2010 fatal error C1189: #error
  10. Central Europe Regional Contest 2012 Problem c: Chemist’s vows