zoukankan      html  css  js  c++  java
  • Resultful分布式架构

    1.创建一个新的项目模块【micro】,该模块提供有API程序类,包括:公共接口,DTO类。

    2.创建一个DTO信息的DTO类,该类的组成和vo类结构相同。(如果说现在的项目使用的是 MyBatis,那么对于当前的DTO设计就比较鸡肋了,但是如果现在要使用的是 SpringDataJPA,那么DTO类就可以帮助使用者隐藏PO类(有一系列的重要注解)的组成结构。)

    package com.yootk.dto;
    import java.io.Serializable;
    public class DeptDTO implements Serializable {
        private  Long deptno;
        private String dname;
        private String loc;
    //setter(),getter(),toString()方法略...
    }
    

    3.【micro】修改pom文件,追加api模块的依赖配置:将micro-api定义成依赖包,方便后面在其他模块引入此模块。

    4.【micro】创建"micro-provider-dept-8001"微服务,并引入相应的依赖库。

    5.【micro-provider-dept-8001】创建描述部门的vo类,这个vo类只存活在当前的RPC服务端

    6.【micro-provider-dept-8001】修改mybatis.cfg.xml配置文件,将自动配置的别名进行包的修改:

    <package name="com.yootk.cloud.vo"/>
    

    7.【micro-provider-dept-8001】定义IDeptDAO接口,实现数据查询操作:写了三个方法

    @Mapper
    public interface IDeptDAO {
        public boolean doCreate(Dept dept);
        public List<Dept> findAll();
        public Dept findById(Long id);
    } 

    8.【micro-provider-dept-8001】创建Dept.xml配置文件,设置接口的数据操作

    9.【micro-provider-dept-8001】修改src/main/resources/application.yml配置文件,配置数据库的连接。

    spring:
      datasource:
        type: com.alibaba.druid.pool.DruidDataSource
        driver-class-name: org.gjt.mm.mysql.Driver
        url: jdbc:mysql://localhost:3306/yootk_8001
        username: root
        password: mysqladmin
        dbcp2:
          min-idle: 5
          initial-size: 3
          max-total: 5
          max-wait-millis: 100
      messages:
        basename: i18n/Message    # 定义要读取的资源文件名称
    
    
    server:
      port: 8001
    mybatis:
      config-location: classpath:mybatis/mybatis.cfg.xml  # MyBatis的核心配置文件
      mapper-locations:
        - classpath:mybatis/mapper/**/*.xml
    

    10.【micro-api】 定义IDeptService业务接口,业务接口一定是暴露在远程端的。

    package com.yootk.service;
    import com.yootk.dto.DeptDTO;
    import java.util.List;
    public interface IDeptService {
        /**
         * 执行数据的增加处理操作,增加的时候将数据保存在DTO类中
         * @param dto 包含有要增加的数据(dname,loc)
         * @return 如果增加成功返回一个不为空的DTO对象,同时将增加后的id保存在此对象之中
         */
        public DeptDTO add(DeptDTO dto);
        public List<DeptDTO> list();
        public DeptDTO get(long id);
    }
    

    11.【micro-provider-dept-8001】在具体的业务提供模块上进行IDeptService接口的实现,不要忘记采用spring内部的@Service注解

    12.【micro-provider-dept-8001】在根包下编写程序启动类:

    package com.yootk.cloud;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    @SpringBootApplication
    public class StartDeptService {
        public static void main(String[] args) {
            SpringApplication.run(StartDeptService.class, args);
        }
    }
    

    13.【micro-provider-dept-8001】编写测试类,进行代码的测试处理。

    package com.yootk.cloud.test;
    import com.yootk.cloud.StartDeptService;
    import com.yootk.dto.DeptDTO;
    import com.yootk.service.IDeptService;
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.test.context.SpringBootTest;
    import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
    import org.springframework.test.context.web.WebAppConfiguration;
    
    @RunWith(SpringJUnit4ClassRunner.class)
    @WebAppConfiguration    // 表示需要启动Web配置才可以进行测试
    @SpringBootTest(classes = StartDeptService.class)  // 定义要测试的启动类
    public class TestDeptService {
        @Autowired
        private IDeptService deptService ;
        @Test
        public void testAdd() {
            DeptDTO dto = new DeptDTO() ;
            dto.setDname("【dept-8001】测试部门名称");
            dto.setLoc("【dept-8001】测试部门位置");
            System.out.println("【部门增加测试】" + this.deptService.add(dto));
        }
        @Test
        public void testGet() {
            System.out.println("【部门ID查询测试】" + this.deptService.get(1));
        }
        @Test
        public void testList() {
            System.out.println("【部门列表测试】" + this.deptService.list());
        }
    }
    

    14.【micro-provider-dept-8001】定义一个DeptRest程序类,进行请求的处理

    package rest;
    import com.yootk.dto.DeptDTO;
    import com.yootk.service.IDeptService;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.*;
    
    @RestController
    public class DeptRest {
        @Autowired
        private IDeptService deptService ;
        @PostMapping("/dept/add")
        public Object add(@RequestBody DeptDTO dto) {
            return this.deptService.add(dto) ;
        }
        @GetMapping("/dept/get/{deptno}")
        public Object get(@PathVariable("deptno") long deptno) {
            return this.deptService.get(deptno) ;
        }
        @GetMapping("/dept/list")
        public Object list() {
            return this.deptService.list() ;
        }
    }
    

    15.【windows】由于需要模拟多台主机之间的访问,所以设置不同的主机名称,修改 hosts文件:

      ● 路径:C: Windows System32 driversletchosts:127.0.0.1  dept-8001.com

      ● 访问路径:http://dept-8001.com:8001/dept/list;

    建立Boot消费端 

      本次的项目还没有在整个的程序里面启动 SpringCloud的相关配置,仅仅只是进行了 SpringBoot与Rest基本实现,在整个的SpringCloud微服务设计里面,最为核心的部分就是Rest交互,而后围绕着Rest交互产生了许多的新的依赖,本次将在“ microclient”模块里面进行Rest服务的调用,该模块运行在80端口(模拟WEB服务器)。

    16.【micro-client】创建micro-client模块并导入相应的依赖包

    17.【micro-client】创建配置类:如果要想进行Rest服务的基本调用,那么在 Spring里面提供有一个 RestTemplate的操作模版,使用这个模版可以将接收到的JSON数据自动的转为指定的对象。

    package com.yootk.boot.config;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.web.client.RestTemplate;

    @Configuration
    public class RestfulConfig {
    @Bean
    public RestTemplate getRestTemplate() {
    return new RestTemplate() ;
    }
    }

      利用这种方式配置不管在项目之中使用多少次的 RestTemplate实际上整个的 Spring只会提供有一个对象实例,得到的好处就

    是避免对象重复的实例化所带来的GC处理问题。

    17.【micro-client】创建DeptConsumerAction程序类,进行所有服务调用:

  • 相关阅读:
    【NET】File操作练习笔记
    【微信小程序】分包的使用和预下载
    【微信小程序】组件Component常用案例
    MVCC多版本并发控制
    数据存储引擎
    seata 分布式事务 -- seata-three工程完整代码
    seata 分布式事务 -- seata-two工程完整代码
    seata 分布式事务 -- seata-one 工程完整代码
    seata 分布式事务 -- 准备工作
    seata 分布式事务 -- TCC模式
  • 原文地址:https://www.cnblogs.com/wxl123/p/11257683.html
Copyright © 2011-2022 走看看