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程序类,进行所有服务调用:

 

转载于:https://www.cnblogs.com/wxl123/p/11257683.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值