开始使用Spring Cloud实战微服务

3.1. Spring Cloud实战前提

3.1.1. 需要的技术储备

语言方面:可以使用Java、scala、Groovy...等等,推荐使用Java

构建工具方面:Java开发者主要使用的是Maven,Androd开发者使用的是Gradle。(将Maven项目转换成Gradle项目所使用的命令是:gradle init --type pom)

依赖技术:Spring Boot

3.1.2. 使用的工具及软件版本

原则:使用最新的版本进行开发

JDK: 1.8版本

Maven:3.3.9版本

IDE:Spring Tool Suite 3.8.2版本,IDEA

Spring Boot :1.5.1版本

Spring Cloud:Camden SR5版本

3.2. 服务提供者与服务消费者

3.2.1 什么是服务提供者和服务消费者?

服务提供者:是指服务的被调用方(即:为其它服务提供服务的服务)

服务消费者:是指服务的调用方(即:依赖其它服务的服务)

3.3. 编写服务提供者

3.3.1. 手动编写项目

3.3.2. 使用Spring Initializr快速创建Spring Boot项目

               首先,我们需要访问http://start.spring.io,如下图所示

接着,选择Spring Boot的版本,目前最新的Spring Boot版本是1.5.1,如下图所示。

接着我们需要选择一些依赖,在搜索框中输入“Web”,会自动显示出有关Web的下拉列表,我们选择第一个,如下图所示。

选择完Web之后,会在下方看到我们所依赖的Web,如下图所示

接着,再选择JPA、Mysql,最后点击下方的“Generate Project”按钮,如下图所示。

点击上图的"Generrate Project"之后弹出如下图所示的对话框,我们点击另存为保存到本地。

接着,我们打开开发工具IntellijIDEA工具,如果是第一次使用IDEA工具,会出现如下图所示的界面,我们点击“Import Project”。

会弹出如下图所示的界面,我们选择我们刚才生成的microservice-simple-provider-user工程下的pom.xml文件,然后点击"OK"

点击上图的“OK”之后,我们便可以看到如下图所示的界面,我们什么也不做,直接点击"Next"(一直下一步)

上图中resources目录下的static和templates两个文件夹没有什么用,我们删掉它,然后我们在resources目录下新建一个schema.sql文件,新建的schema.sql文件需要配置一下“Configure data source”、"Change dialect to..."这两项,我们先点击"Configure data source"。

点击上图的"Configure data source"之后,我们可以看到如下图所示的界面,我们选择左侧的"MySQL",右侧的"Driver files"下面没有内容,我们点击"Download"下载驱动文件。

下载完驱动文件后,如下图所示,我们点击"OK"

这时如果您的IDEA工具还从来没添加过Mysql,那么schema.sql文件依然提示要配置data source和方言,那么我们怎么添加Mysql呢?我们发现啊,在IDEA工具的右侧,有一列工具栏,我们点击Database那一栏。

点击上图的"Database"那一栏后我们可以看到如下图所示的界面,可以看到,我还未添加过任何数据库,下面我们点击那个"+"号图标。

点击上图的"+"号图标之后,我们看到如下图所示界面,我们点击MySQL

点击上图的"MySQL"之后,我们可以看到如下图所示的界面,我们新建一个数据库Database:"microservice",User和Password是我们本地安装的Mysql的用户名和密码。之后我们需要测试连接是否可以成功(先不要点击Test Connection)。

点击上图的"Apply"和"OK"之后,可以看到如下图所示的界面,我们可以试一条SQL语句看是否可以查询到结果,比如我们查询所有的数据库,可以看到正确查询出了结果。

我们添加完Mysql数据库后,我们刚才添加的schema.sql文件提示的内容便减少了一条,只剩下让我们配置方言了,如下图所示。我们点击"Change dialect to..."

我们可以看到如下图所示的界面,可以看到默认情况下SQL Dialect都是Generic,我们既然用的数据库是Mysql,那么我们便点击"Generic",在下拉框中选择"MySQL"。

选择完方言之后,如下图所示。我们点击"OK"

点击上图的"OK"之后,我们可以看到我们的schema.sql文件终于不再报异常提示信息了,我们在该sql文件中写上建表语句,如下图所示。

同理,我们再新建一个data.sql文件,并在该文件中写上插入语句,如下图所示。

3.3.3. 编写服务提供者

实体类User

package com.itmuch.cloud.microservicesimpleprovideruser.entity;

import javax.persistence.*;

@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column
private String username;
@Column
private String name;
@Column
private int age; public String getUsername() {
return username;
} public void setUsername(String username) {
this.username = username;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} public float getBalance() {
return balance;
} public void setBalance(float balance) {
this.balance = balance;
} @Column
private float balance; public Long getId() {
return id;
} public void setId(Long id) {
this.id = id;
}
}

UserRepository

package com.itmuch.cloud.microservicesimpleprovideruser.repository;

import com.itmuch.cloud.microservicesimpleprovideruser.entity.User;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository; @Repository
public interface UserRepository extends JpaRepository<User ,Long> {
}

UserController

package com.itmuch.cloud.microservicesimpleprovideruser.Controller;

import com.itmuch.cloud.microservicesimpleprovideruser.entity.User;
import com.itmuch.cloud.microservicesimpleprovideruser.repository.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class UserController { @Autowired
private UserRepository userRepository;
@GetMapping("/simple/{id}")
public User findById(@PathVariable Long id){
return userRepository.findOne(id);
}
}

注意版本要选择2.0.0下的

3.4. 编写服务消费者

3.3.1. 手动编写项目

3.3.2. 使用Spring Initializr快速创建Spring Boot项目(同理和服务提供者)

 第二步我们搭建了一个服务提供者,现在我们来搭建一个服务消费者,我们依然从http://start.spring.io网站生成我们的微服务框架,我们可以注意到,在Dependencies这一栏只选择了一个Web,选好并输入完后,点击"Generate Project"按钮。

点击上图的"Generate Project"按钮后会弹出下载对话框,如下图所示,另存为保存到本地磁盘。

下面我们把该消费者导入到Intellij IDEA工具中,我们点击File---->New------>Module from Existing Sources...,如下图所示

在弹出的对话框中我们选择我们刚才加压好的movie微服务的pom.xml文件,然后点击"OK",如下图所示。

下面两步只需点击"Next",然后点击"Finish"按钮即可把工程加到Intellij IDEA工具中来,如下图所示

3.4.3. 编写服务提供者

movieController

package com.itmuch.cloud.microservicesimpleprovidermovie.Controller;

import com.itmuch.cloud.microservicesimpleprovidermovie.entity.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate; @RestController
public class movieController {
@Autowired
private RestTemplate restTemplate; @GetMapping("/movie/{id}")
public User findById(@PathVariable Long id)
{
return this.restTemplate.getForObject("http://localhost:7900/simple/" + id, User.class);
} }

实体类

package com.itmuch.cloud.microservicesimpleprovidermovie.entity;

public class User {
private Long id; private String username; private String name; private int age; private float balance; public Long getId() {
return id;
} public void setId(Long id) {
this.id = id;
} public String getUsername() {
return username;
} public void setUsername(String username) {
this.username = username;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} public float getBalance() {
return balance;
} public void setBalance(float balance) {
this.balance = balance;
}
}

配置文件application.yml

server:
port:

启动类

package com.itmuch.cloud.microservicesimpleprovidermovie;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate; @SpringBootApplication
public class MicroserviceSimpleProviderMovieApplication {
@Bean
public RestTemplate restTemplate()
{
return new RestTemplate();
} public static void main(String[] args) {
SpringApplication.run(MicroserviceSimpleProviderMovieApplication.class, args);
}
}

3.5. 为项目整合Spring Boot Actuator

    1. 了解Acuator

      Spring Boot Acuator 提供了很多控制端点。从而了解应用程序的状况。

    2. Acuator监控端点及描述

    3. 为项目添加依赖

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

      测试:访问 http://127.0.0.1:8080/health
       结果:{"status":"UP"} ,返回的是UP表示正常

      访问http://127.0.0.1:8080/info    结果:{}
      证明info没有公开   结果:{}证明info没有公开

    4. 配置application.yml

      info:
      app:
      name: "@project.name@"
      description: "@project.description@"
      version: "@project.version@"
      spring-boot-version: "@project.parent.version@"
      再次访问 http://localhost:8080/info
      结果:
      {"app":{"name":"microservice-simple-provider-user","description":"zjmdemo","version":"0.0.1-SNAPSHOT","spring-boot-version":"1.5.9.RELEASE"}}
      访问:http://127.0.0.1:8080/autoconfig
    5. 参考文档:

      https://docs.spring.io/spring-boot/docs/1.5.9.BUILD-SNAPSHOT/reference/htmlsingle

3.6. 硬编码有哪些问题

项目GIT库:https://gitee.com/cyj930307/springcloud_textbook.git

3.开始使用Spring Cloud实战微服务的更多相关文章

  1. 0201-开始使用Spring Cloud实战微服务准备工作

    1.Spring Cloud是什么 基于spring boot,之上快速构建分布式系统的工具集 服务注册和发现[eureka.Consul.Zookeeper].服务负载均衡[Ribbon,feign ...

  2. Spring Cloud实战微服务入门

    1.spring cloud是什么? 是一个快速构建分布式系统的工具集,构建于Spring Boot之上 2.spring cloud 的特点 约定优于配置 开箱即用.快速启动 适用于各种环境 轻量级 ...

  3. 从零开始学spring cloud(二) -------- 开始使用Spring Cloud实战微服务

    1.准备工作 2.服务提供者与服务消费者 3.服务发现与服务注册 服务发现: 服务注册表: 服务注册表是一个记录当前可用服务实例的网络信息的数据库,是服务发现机制的核心.服务注册表提供查询API和管理 ...

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

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

  5. Spring Cloud构建微服务架构

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

  6. 《深入理解Spring Cloud与微服务构建》书籍目录

    转载请标明出处: https://blog.csdn.net/forezp/article/details/79735542 本文出自方志朋的博客 作者简介 方志朋,毕业于武汉理工大学,CSDN博客专 ...

  7. Spring Cloud Alibaba | 微服务分布式事务之Seata

    Spring Cloud Alibaba | 微服务分布式事务之Seata 本篇实战所使用Spring有关版本: SpringBoot:2.1.7.RELEASE Spring Cloud:Green ...

  8. 《Spring Cloud构建微服务架构》系列博文示例

    SpringCloud-Learning   源码下载地址:http://download.csdn.net/detail/k21325/9650968     本项目内容为Spring Cloud教 ...

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

    show me the code and talk to me,做的出来更要说的明白 GitHub 项目learnSpringCloud同步收录 我是布尔bl,你的支持是我分享的动力! 一. 引入 上 ...

随机推荐

  1. 【原创】Linux基础之重定向stdout/stderr

    启动进程后查看日志(stdout和stderr) 1 nohup+tail # nohup $cmd > /path/to/file 2>&1 & # tail -f /p ...

  2. sda.Update批量更新数据

    老方法了,重新做个记录. string connStr = ConfigurationManager.ConnectionStrings["constring"].ToString ...

  3. python检测域名

    pip install python-whois import whois print(whois.whois('baidu.com')) #输出有关baidu.com的所有域名

  4. 帝国cms 此栏目暂无任何新增信息处理办法

    在做一个新网站的时候不能保证每个栏目都能填充内容,当某个栏目没有内容填充的时候总会出现“此栏目暂无任何新增信息”看着挺不舒服. 其实想删除这行字也挺简单,只需要修改下语言包即可!如下: 找到语言包文件 ...

  5. java 常用日期工具类的操作

    获取指定日期的时间戳 /* * 获取指定日期的时间戳 * */ public static long getMillis(String date_str){ try { SimpleDateForma ...

  6. (๑•̀ㅂ•́)و✧QQ用户信息管理系统

    这是第二篇文章,就直接切主题 这次剖析的也是自己的作业之一:QQ信息管理系统 一:(此处省略了建Proarams类,其实目的只是想强调把连接语句单独放一个类里更容易调用,命名规范如图) 二:(导入SQ ...

  7. <(* ̄▽ ̄*)/低碳生活管理系统

    首次在博客园发布文章,都是个人理解,有很多不足,多多包涵. 下面是对做过的作业低碳生活管理系统的剖析: 一:(建类) 二:(在Program[或自己命名的类]里调用SQL命名空间) 三:(Main方法 ...

  8. (转)JVM垃圾回收机制

    一.技术背景 GC的历史比Java久远,早在1960年Lisp这门语言中就使用了内存动态分配和垃圾回收技术 二.那些内存需要回收? JVM的内存结构包括五大区域:程序计数器.虚拟机栈.本地方法栈.堆区 ...

  9. ORA-01145: offline immediate disallowed unless media recovery enabled问题解决

    ORA-01145: offline immediate disallowed unless media recovery enabled (随记,后续整理) 数据库只有在归档模式下才能够直接对数据文 ...

  10. Delphi WaitCommEvent函数