show me the code and talk to me,做的出来更要说的明白

GitHub 项目learnSpringCloud同步收录

我是布尔bl,你的支持是我分享的动力!

一、 引入

上回 Spring Cloud 理论篇 介绍了 Spring Cloud 的常见组件,让读者对 Spring Cloud 有了一个宏观认识,这是从理论层面出发的。接下来我们就进入 Spring Cloud 的实战教程,撸起袖子,真枪实弹干一场。在实战演练中感受一下 Spring Cloud 的魅力所在。在教程中,我会将 Spring Cloud 常见组件进行整合。整个过程就像搭积木一样,一点一点地完成一个微服务工程的搭建。实战演练是比较繁琐的,但是只要我们真正地去做了,就会收获很多。

二、Eureka 组件(注册中心)

作为 Spring Cloud 的注册中心,我们第一步需要把 Eureka 组件搭起来。因为接下来的消费者以及生产者都是以 Eureka 组件为基础展开的。

2.1 pom 文件

我们引入 Eureka 的依赖。

  1. <dependency>
  2. <groupId>org.springframework.cloud</groupId>
  3. <artifactId>spring-cloud-starter-eureka-server</artifactId>
  4. </dependency>

正如 Spring Cloud 理论篇 提到 Spring Cloud 是基于 SpringBoot 开发的。那么读者是否有疑惑为什么不需要

web模块呢?当然是需要的,只不过是 Eureka 的依赖的依赖中已经包含了必要的模块。

2.2 yml 文件

引入必要模块后,我们就要去配置 yml 文件了。

  1. server:
  2. port: 7001
  3. eureka:
  4. instance:
  5. hostname: localhost # eureka 服务端的实例名称
  6. client:
  7. register-with-eureka: false # 表示不需要向注册中心注册自己
  8. fetch-registry: false # false 表示自己端就是注册中心,我的职责就是维护服务实例,并不需要去检索服务
  9. service-url:
  10. defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka # 设置与 Eureka Server 交互的地址查询服务和注册服务

至于配置相关的文件意义,注释已经说的很清楚了。详情请看注释。

2.3 启动类

最后写好启动类,就算完成的Eureka 组件的搭建了。

  1. @SpringBootApplication
  2. @EnableEurekaServer
  3. public class AppApplication7001 {
  4. public static void main( String[] args ) {
  5. SpringApplication.run(AppApplication7001.class, args);
  6. }
  7. }

可以看到我们的启动类的注解除了万年不变的@SpringBootApplication,还增加了 @EnableEurekaServer,该注解的作用是表明该工程作为 Eureka 组件存在的。就好像我们怎么证明自己的身份呢,拿出自己的身份证即可。

2.4 启动效果

Eureka 组件启动如图所示。

三、生产者(服务提供者)

3.1 pom 文件

我们再新建一个工程,该工程其实本质也是一个 Eureka 组件,不过我们可以通过配置文件使其变成生产者。可能读者有点迷糊,我打个比方。社会上有警察、医生、码畜等等,有很多的身份类型,但本质我们都是人。我们都是有感情的生物。回到代码层面,首先我们需要引入相关依赖。

  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-web</artifactId>
  4. </dependency>
  5. <dependency>
  6. <groupId>org.springframework.cloud</groupId>
  7. <artifactId>spring-cloud-starter-eureka</artifactId>
  8. </dependency>

3.2 yml 文件

  1. server:
  2. port: 8002 # 服务的端口
  3. eureka:
  4. client:
  5. service-url:
  6. defaultZone: http://localhost:7001/eureka

3.3 启动类

  1. @SpringBootApplication
  2. @EnableEurekaClient
  3. public class AppApllcation8002{
  4. public static void main( String[] args ) {
  5. SpringApplication.run(AppApllcation8002.class, args);
  6. }
  7. }

这里我们可以看到注册中心的启动类和服务提供者的注解是不一样的。

注册中心 服务提供者
@EnableEurekaServer @EnableEurekaClient

3.4 启动效果

目前我们有了两个工程,启动的时候是有顺序的。首先启动注册中心然后再启动服务提供者。这就好比我们先要有房子了,才可以入住一样。

对比上图我们可以发现网页多出来一个服务提供者。说明服务提供者项目搭建完成。

四、消费者(服务消费者)

4.1 pom 文件

有个服务提供者,那么是不是应该有服务消费者呢?此时我们需要新建另外一个工程作为服务消费者。那么问题来了,作为服务消费者,我们怎样去调用服务提供者呢?此时,肯定是不能像以前直接在 controller 层调用 service 层一样了,因为服务消费者和服务提供者是两个工程了,并且分别运行在两个 tomcat 里面。这里我们就需要进行网络调用了。在 Spring Cloud 里面我们可以使用 Feign 进行不同服务的调用。

  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-web</artifactId>
  4. </dependency>
  5. <dependency>
  6. <groupId>org.springframework.boot</groupId>
  7. <artifactId>spring-boot-starter-test</artifactId>
  8. <scope>test</scope>
  9. </dependency>
  10. <dependency>
  11. <groupId>org.springframework.cloud</groupId>
  12. <artifactId>spring-cloud-starter-eureka</artifactId>
  13. </dependency>
  14. <dependency>
  15. <groupId>org.springframework.cloud</groupId>
  16. <artifactId>spring-cloud-starter-feign</artifactId>
  17. </dependency>

4.2 yml 文件

接下来我们需要配置yml 文件。

  1. server:
  2. port: 80
  3. eureka:
  4. client:
  5. register-with-eureka: false # 不向注册中心注册了
  6. service-url:
  7. defaultZone: http://localhost:7001/eureka

因为工程是作为服务消费者存在的。所以我们不需要往注册中心注册服务。这样注册中心就只管理好服务提供者即可。

4.3 启动类以及feign类接口

  1. @FeignClient(value = "microservicloud-dept") // 服务提供者的名字
  2. public interface IFeignService {
  3. @GetMapping("/provide")
  4. String feign();
  5. }
  6. @SpringBootApplication
  7. @RestController
  8. @EnableEurekaClient
  9. @EnableFeignClients(basePackages = {"com.example"})
  10. public class AppApplication80 {
  11. public static void main( String[] args ) {
  12. SpringApplication.run(AppApplication80.class, args);
  13. }
  14. @Autowired
  15. private IFeignService feignService;
  16. @GetMapping("/controller/feign")
  17. public String feign(){
  18. return feignService.feign();
  19. }
  20. }

五、总结

至此我们就完成了一个简单的 Spring Cloud 的微服务架构多模块项目。根据项目搭建,我们可以简单画出架构图。具体源码已经在开头引用给出,可以直接克隆运行。

关注微信公众号,随时移动端阅读

基于 Spring Cloud 的微服务架构实践指南(上)的更多相关文章

  1. 基于 Spring Cloud 的微服务架构实践指南(下)

    show me the code and talk to me,做的出来更要说的明白 本文源码,请点击learnSpringCloud 我是布尔bl,你的支持是我分享的动力! 一.引入 上回 基于 S ...

  2. 干货|基于 Spring Cloud 的微服务落地

    转自 微服务架构模式的核心在于如何识别服务的边界,设计出合理的微服务.但如果要将微服务架构运用到生产项目上,并且能够发挥该架构模式的重要作用,则需要微服务框架的支持. 在Java生态圈,目前使用较多的 ...

  3. 基于Spring Cloud的微服务落地

    微服务架构模式的核心在于如何识别服务的边界,设计出合理的微服务.但如果要将微服务架构运用到生产项目上,并且能够发挥该架构模式的重要作用,则需要微服务框架的支持. 在Java生态圈,目前使用较多的微服务 ...

  4. Cola Cloud 基于 Spring Boot, Spring Cloud 构建微服务架构企业级开发平台

    Cola Cloud 基于 Spring Boot, Spring Cloud 构建微服务架构企业级开发平台: https://gitee.com/leecho/cola-cloud

  5. Spring Cloud构建微服务架构(一)服务注册与发现

    Spring Cloud简介 Spring Cloud是一个基于Spring Boot实现的云应用开发工具,它为基于JVM的云应用开发中的配置管理.服务发现.断路器.智能路由.微代理.控制总线.全局锁 ...

  6. Spring Cloud构建微服务架构(二)服务消费者

    Netflix Ribbon is an Inter Process Communication (IPC) cloud library. Ribbon primarily provides clie ...

  7. Spring Cloud构建微服务架构:服务网关(路由配置)【Dalston版】

    转载:http://blog.didispace.com/spring-cloud-starter-dalston-6-2/ 原创  2017-08-26  翟永超  Spring Cloud 被围观 ...

  8. 基于Spring Cloud的微服务入门教程

    (本教程的原地址发布在本人的简书上:http://www.jianshu.com/p/947d57d042e7,若各位看官有什么问题或不同看法请在这里或简书留言,谢谢!) 本人也是前段时间才开始接触S ...

  9. Spring Cloud构建微服务架构

    Dalston版本 由于Brixton和Camden版本的教程已经停止更新,所以笔者计划在2017年上半年完成Dalston版本的教程编写(原计划完成Camden版本教程,但由于写了两篇Dalston ...

随机推荐

  1. MySQL学习之路 一 : MySQL 5.7.19 源码安装

    MySQL 5.7.19 源码安装 查看系统: # cat /etc/redhat-release CentOS Linux release 7.3.1611 (Core) 安装依赖包 # yum - ...

  2. MySQL集群MGR架构for多主模式

    本文转载自: https://www.93bok.com MGR简介 MySQL Group Replication(简称MGR)是MySQL官方于2016年12月推出的一个全新的高可用与高扩展的解决 ...

  3. 线程(Thread)的四种停止方式

    1.正常的程序启动,停止 2.使用退出标记,一般程序在run()方法后,线程会正常结束.但是有一些伺服线程还在运行,他们运行时间较长,只有当外部条件满足时,他们才会停止.实现如下: public cl ...

  4. 【asp.net core】实现动态 Web API

    序言: 远程工作已经一个月了,最近也算是比较闲,每天早上起床打个卡,快速弄完当天要做的工作之后就快乐摸鱼去了.之前在用 ABP 框架(旧版)的时候就觉得应用服务层写起来真的爽,为什么实现了个 IApp ...

  5. Feign 客户端的使用 二

    一.Feign的使用(客户端调用 json/xml格式的接口) 1.服务端接口编写 <parent> <groupId>org.springframework.boot< ...

  6. koa进阶史(二)

    之前想着放弃CAS的验证吧,但是又去请教了一个大牛,了解到sf公司的CAS验证校验的参数不是sessionId而是另外两个,后登陆sit环境偷了两个参数后,后台接口成功返回200.然后node层也就能 ...

  7. seo搜索优化教程09 - seo搜索优化外链优化

    为了使大家更方便的了解及学习网络营销推广.seo搜索优化,星辉科技强势推出seo搜索优化教程.此为seo教程第九课 网络营销推广中有句行话,叫做"内容为王,外链为王",可见外链对于 ...

  8. [每日一题系列] LeetCode 1071. 字符串的最大公因子

    题目 对于字符串 S 和 T,只有在 S = T + ... + T(T 与自身连接 1 次或多次)时,我们才认定 "T 能除尽 S". 返回最长字符串 X,要求满足 X 能除尽 ...

  9. rest framework serializer

    串行器 扩大串行的用处是什么,我们想地址.然而,这不是一个简单的问题,它会采取一些严重的设计工作. -罗素基思-马吉,Django的用户组 串行器允许诸如查询集和模型实例复杂的数据转换为原生的Pyth ...

  10. Aircrack-ng无线审计工具破解无线密码

    Aircrack-ng工具 Aircrack-ng是一个与802.11标准的无线网络分析的安全软件,主要功能有网络探测.数据包嗅探捕获.WEP和WPA/WPA2-PSK破解.Aircrack可以工作在 ...