• 3.开始使用Spring Cloud实战微服务


                     开始使用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: 7901

    启动类

    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

  • 相关阅读:
    SQL Server 2005 中的分区表和索引
    经典SQL语句大全
    SQLSERVER数据表的记录重排物理优化方案
    Sql Server性能优化——Partition(创建分区)
    关于 shell 脚本编程的10 个最佳实践
    ARM相关
    GNU ARM 汇编指令
    一个初学者该如何学习内核?
    NANDFLASH原理分析
    什么是GPIO?
  • 原文地址:https://www.cnblogs.com/caoyingjielxq/p/9399315.html
Copyright © 2020-2023  润新知