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 的依赖。

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

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

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

2.2 yml 文件

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

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

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

2.3 启动类

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

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

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

2.4 启动效果

Eureka 组件启动如图所示。

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

3.1 pom 文件

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

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

3.2 yml 文件

server:
port: 8002 # 服务的端口
eureka:
client:
service-url:
defaultZone: http://localhost:7001/eureka

3.3 启动类

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

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

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

3.4 启动效果

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

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

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

4.1 pom 文件

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

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-feign</artifactId>
</dependency>

4.2 yml 文件

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

server:
port: 80 eureka:
client:
register-with-eureka: false # 不向注册中心注册了
service-url:
defaultZone: http://localhost:7001/eureka

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

4.3 启动类以及feign类接口

@FeignClient(value = "microservicloud-dept") // 服务提供者的名字
public interface IFeignService {
@GetMapping("/provide")
String feign();
} @SpringBootApplication
@RestController
@EnableEurekaClient
@EnableFeignClients(basePackages = {"com.example"})
public class AppApplication80 {
public static void main( String[] args ) {
SpringApplication.run(AppApplication80.class, args);
} @Autowired
private IFeignService feignService;
@GetMapping("/controller/feign")
public String feign(){
return feignService.feign();
} }

五、总结

至此我们就完成了一个简单的 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. Docker 运行容器 CentOS7 使用systemctl 启动报错 Failed to get D-Bus connection: Operation not permitted

    原系统:Centos 7 Docker 版本:1.12.6 操作:安装并运行 Tomcat 问题:在创建好容器之后,并且进入系统运行启动tomcat [root@cd11558d3a22 /]# sy ...

  2. sklearn简单实现机器学习算法记录

    sklearn简单实现机器学习算法记录 需要引入最重要的库:Scikit-learn 一.KNN算法 from sklearn import datasets from sklearn.model_s ...

  3. 从0开始学Git——Git的常用配置

    配置user信息 配置user.name和user.email git config --global user.name 'admin' #设置用户名 git config --global use ...

  4. d3学习day3 --y轴添加文本标签

    y轴添加文本标签 g.append("g") .call(y_axis) .append("text") .text("price($)") ...

  5. 前端每日实战:123# 视频演示如何用纯 CSS 创作一架双冀飞机

    效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/yxVYRL 可交互视频 此视频是可 ...

  6. python读入写入中文名图片

    import os import cv2 import numpy as np # 读入中文命名图片 def cv_imread(in_path): cv_img = cv2.imdecode(np. ...

  7. 峰哥说技术:01-Spring Boot介绍

    Spring Boot深度课程系列 峰哥说技术—2020庚子年重磅推出.战胜病毒.我们在行动 Spring Boot介绍 A.Spring Boot是什么? 由于Spring是一个轻量级的企业开发框架 ...

  8. 最新版jdk 13环境变量配置

    1.配置环境变量 右击“我的电脑”-->"属性"-->"高级系统设置"-->"高级"-->"环境变量&qu ...

  9. iPhone UIButton图标与文字间距设置【转】

    UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(50, 50, 150, 50)]; [button setTitle:@& ...

  10. 问不倒的HTTP协议

    一.HTTP简介 1.HTTP HTTP:超文本传输协议,是一种通信协议:允许超文本标记文档从Web服务器传送到客户端的浏览器中. 简单:传输html文件的协议. Web:是一种基于超文本和HTML的 ...