• 【Spring Cloud 远程调用】管理员服务系统


    • 💂 个人主页: 程序员爱摸鱼
    • 🤟 版权: 本文由【程序员爱摸鱼】原创、在CSDN首发、需要转载请联系博主
    • 💬 如果文章对你有帮助、欢迎关注+点赞+收藏(一键三连)哦
    • 💅 想寻找共同成长的小伙伴,可以互粉哦

                                                                            


    1. 什么是远程调用

    • 客户端程序通过接口调用服务端程序,并获得该服务返回的数据的过程,称为远程调用。

    • “商品管理系统”调用“用户管理系统”的过程,就是“远程调用”。此时“商品管理系统”相当于模拟“浏览器”。

     

     


    1.1 调用方式

    • 常见的远程调用方式有2种:

      • RPC:Remote Produce Call远程过程调用,==自定义数据==格式的远程调用方式。基于原生TCP通信,速度快,效率高。

      • Http:采用http协议远程调用方式,==规定==了数据传输的格式,缺点是消息封装臃肿。现在热门的Rest风格,就可以通过http协议来实现。

    • 常见框架 :

      • RPC常见框架: dubbo、WebService

      • Http常见框架:HttpClient、RestTemplat

    区别HTTPRPC
    速度较慢
    难度简单复杂
    灵活性灵活,跨平台,跨语言

    2. 搭建环境

            2.1 创建父项目:daykaohe6_22        

                    2.1.1配置pom文件

    1. <parent>
    2. <groupId>org.springframework.cloud</groupId>
    3. <artifactId>spring-cloud-build</artifactId>
    4. <version>2.3.5.RELEASE</version>
    5. </parent>
    6. <properties>
    7. <spring.cloud.version>Hoxton.SR12</spring.cloud.version>
    8. <spring.cloud.alibaba.version>2.2.7-SNAPSHOT</spring.cloud.alibaba.version>
    9. <mybatis.plus.starter.version>3.4.0</mybatis.plus.starter.version>
    10. <durid.starter.version>1.1.10</durid.starter.version>
    11. <swagger.version>2.7.0</swagger.version>
    12. <jwt.jjwt.version>0.9.0</jwt.jjwt.version>
    13. <jwt.joda.version>2.9.7</jwt.joda.version>
    14. </properties>
    15. <dependencyManagement>
    16. <dependencies>
    17. <!-- Spring Dependencies -->
    18. <dependency>
    19. <groupId>org.springframework.boot</groupId>
    20. <artifactId>spring-boot-dependencies</artifactId>
    21. <version>${spring-boot.version}</version>
    22. <type>pom</type>
    23. <scope>import</scope>
    24. </dependency>
    25. <dependency>
    26. <groupId>org.springframework.cloud</groupId>
    27. <artifactId>spring-cloud-dependencies</artifactId>
    28. <version>${spring.cloud.version}</version>
    29. <type>pom</type>
    30. <scope>import</scope>
    31. </dependency>
    32. <dependency>
    33. <groupId>com.alibaba.cloud</groupId>
    34. <artifactId>spring-cloud-alibaba-dependencies</artifactId>
    35. <version>2.2.7.RELEASE</version>
    36. <type>pom</type>
    37. </dependency>
    38. <!-- mybatis-plus -->
    39. <dependency>
    40. <groupId>com.baomidou</groupId>
    41. <artifactId>mybatis-plus-boot-starter</artifactId>
    42. <version>${mybatis.plus.starter.version}</version>
    43. </dependency>
    44. <!-- Druid连接池 -->
    45. <dependency>
    46. <groupId>com.alibaba</groupId>
    47. <artifactId>druid-spring-boot-starter</artifactId>
    48. <version>${durid.starter.version}</version>
    49. </dependency>
    50. <!--swagger2-->
    51. <dependency>
    52. <groupId>io.springfox</groupId>
    53. <artifactId>springfox-swagger2</artifactId>
    54. <version>${swagger.version}</version>
    55. </dependency>
    56. <dependency>
    57. <groupId>io.springfox</groupId>
    58. <artifactId>springfox-swagger-ui</artifactId>
    59. <version>${swagger.version}</version>
    60. </dependency>
    61. </dependencies>
    62. </dependencyManagement>

        2.2 创建子项目:company-data

    1.  环境
      1. <dependencies>
      2. <!--web起步依赖-->
      3. <dependency>
      4. <groupId>org.springframework.boot</groupId>
      5. <artifactId>spring-boot-starter-web</artifactId>
      6. </dependency>
      7. <!--swagger2-->
      8. <dependency>
      9. <groupId>io.springfox</groupId>
      10. <artifactId>springfox-swagger2</artifactId>
      11. </dependency>
      12. <dependency>
      13. <groupId>io.springfox</groupId>
      14. <artifactId>springfox-swagger-ui</artifactId>
      15. </dependency>
      16. <!--支持lombok-->
      17. <dependency>
      18. <groupId>org.projectlombok</groupId>
      19. <artifactId>lombok</artifactId>
      20. </dependency>
      21. <dependency>
      22. <groupId>com.baomidou</groupId>
      23. <artifactId>mybatis-plus-boot-starter</artifactId>
      24. <version>3.4.0</version>
      25. </dependency>
      26. <!--MySQL数据库驱动-->
      27. <dependency>
      28. <groupId>mysql</groupId>
      29. <artifactId>mysql-connector-java</artifactId>
      30. </dependency>
      31. <!--测试-->
      32. <dependency>
      33. <groupId>org.springframework.boot</groupId>
      34. <artifactId>spring-boot-starter-test</artifactId>
      35. </dependency>
      36. <dependency>
      37. <groupId>com.czxy.</groupId>
      38. <artifactId>test-mybatis-plus</artifactId>
      39. <version>1.0-SNAPSHOT</version>
      40. <scope>test</scope>
      41. </dependency>
      42. </dependencies>

    2. application.yml配置文件
      1. server:
      2. port: 8081
      3. spring:
      4. datasource:
      5. driver-class-name: com.mysql.cj.jdbc.Driver
      6. url: jdbc:mysql://localhost:3306/20220622exam?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
      7. username: root
      8. password: 1234
      9. mybatis-plus:
      10. configuration:
      11. log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #输出日志
      12. map-underscore-to-camel-case: true
      13. global-config:
      14. db-config:
      15. table-prefix: t_

    3. 创建javaBean
      1. package com.czxy.domain;
      2. import com.baomidou.mybatisplus.annotation.TableId;
      3. import com.baomidou.mybatisplus.annotation.TableName;
      4. import lombok.AllArgsConstructor;
      5. import lombok.Data;
      6. import lombok.NoArgsConstructor;
      7. @Data
      8. @NoArgsConstructor
      9. @AllArgsConstructor
      10. @TableName("companys")
      11. public class Companys {
      12. @TableId
      13. private String keyno;
      14. private String cname;
      15. private String oper;
      16. private String industry;
      17. }

    4. 创建CompanysContoller
      1. @RestController
      2. @RequestMapping("/companys")
      3. public class CompanysContoller {
      4. @Resource
      5. private CompanysMapper companysMapper;
      6. @GetMapping
      7. public BaseResult selectAll(){
      8. List<Companys> list = companysMapper.selectList(null);
      9. if(list ==null){
      10. return BaseResult.error("查询失败");
      11. }
      12. return BaseResult.ok("查询成功",list);
      13. }
      14. @GetMapping("/{keyno}")
      15. public BaseResult selectById(@PathVariable("keyno") String keyno){
      16. Companys companys = companysMapper.selectById(keyno);
      17. if(companys ==null){
      18. return BaseResult.error("查询失败");
      19. }
      20. return BaseResult.ok("查询成功",companys);
      21. }
      22. @PostMapping
      23. public BaseResult save(@RequestBody Companys companys){
      24. int insert = companysMapper.insert(companys);
      25. if(insert !=1){
      26. return BaseResult.error("添加失败");
      27. }
      28. return BaseResult.ok("添加成功");
      29. }
      30. @DeleteMapping("/{keyno}")
      31. public BaseResult deleteById(@PathVariable("keyno") String keyno){
      32. int i = companysMapper.deleteById(keyno);
      33. if(i !=1){
      34. return BaseResult.error("删除失败");
      35. }
      36. return BaseResult.ok("删除成功");
      37. }
      38. @PutMapping
      39. public BaseResult updata(@RequestBody Companys companys){
      40. int i = companysMapper.updateById(companys);
      41. if(i !=1){
      42. return BaseResult.error("修改失败");
      43. }
      44. return BaseResult.ok("修改成功");
      45. }
      46. }

    5. 创建Mapper
      1. @Mapper
      2. public interface CompanysMapper extends BaseMapper<Companys> {
      3. }

    6. 创建启动类
      1. @SpringBootApplication
      2. public class TestCompanyApplication {
      3. public static void main(String[] args) {
      4. SpringApplication.run(TestCompanyApplication.class,args);
      5. }
      6. }

      2.2 创建子项目:company-http

    1. 创建启动类
      1. @SpringBootApplication
      2. public class TesthttpApplication {
      3. public static void main(String[] args) {
      4. SpringApplication.run(TesthttpApplication.class,args);
      5. }
      6. }

    2. 创建javaBean
      1. @Data
      2. @NoArgsConstructor
      3. @AllArgsConstructor
      4. public class Companys {
      5. private String keyno;
      6. private String cname;
      7. private String oper;
      8. private String industry;
      9. }

    3. 创建contoller
      1. @RestController
      2. @RequestMapping("/companys")
      3. public class CompanysContoller {
      4. @Resource
      5. private CompanysService companysService;
      6. @GetMapping
      7. public BaseResult selectAll() {
      8. List<Companys> list=companysService.list();
      9. return BaseResult.ok("查询成功",list);
      10. }
      11. @GetMapping("/{keyno}")
      12. public BaseResult selectById(@PathVariable("keyno") String keyno){
      13. BaseResult<Companys> user = companysService.getById(keyno);
      14. return BaseResult.ok("查询成功",user);
      15. }
      16. @PostMapping
      17. public BaseResult save(@RequestBody Companys companys){
      18. try {
      19. companysService.insert(companys);
      20. return BaseResult.ok("添加成功");
      21. } catch (Exception e) {
      22. return BaseResult.error(e.getMessage());
      23. }
      24. }
      25. @DeleteMapping("/{keyno}")
      26. public BaseResult deleteById(@PathVariable("keyno") String keyno){
      27. Boolean i = companysService.deleteById(keyno);
      28. if(i){
      29. return BaseResult.ok("删除成功");
      30. }
      31. return BaseResult.error("删除失败");
      32. }
      33. @PutMapping
      34. public BaseResult updata(@RequestBody Companys companys){
      35. try {
      36. companysService.updateById(companys);
      37. return BaseResult.ok("修改成功");
      38. } catch (Exception e) {
      39. return BaseResult.error(e.getMessage());
      40. }
      41. }
      42. }

    4. 创建service
      1. package com.czxy.service.impl;
      2. import com.czxy.admin.AdminTest;
      3. import com.czxy.domain.Companys;
      4. import com.czxy.service.CompanysService;
      5. import com.czxy.vo.BaseResult;
      6. import org.springframework.stereotype.Service;
      7. import org.springframework.transaction.annotation.Transactional;
      8. import javax.annotation.Resource;
      9. import java.util.List;
      10. @Service
      11. @Transactional
      12. public class CompanysServiceimpl implements CompanysService {
      13. @Resource
      14. private AdminTest adminTest;
      15. @Override
      16. public List<Companys> list() {
      17. List<Companys> list= adminTest.list();
      18. return list;
      19. }
      20. @Override
      21. public BaseResult<Companys> getById(String keyno) {
      22. BaseResult<Companys> userBaseResult = adminTest.selectById(keyno);
      23. return userBaseResult;
      24. }
      25. @Override
      26. public void insert(Companys companys) {
      27. adminTest.insert(companys);
      28. }
      29. @Override
      30. public Boolean deleteById(String keyno) {
      31. Boolean result=adminTest.delete(keyno);
      32. return result;
      33. }
      34. @Override
      35. public void updateById(Companys companys) {
      36. adminTest.update(companys);
      37. }
      38. }

    5. 创建admin进行远程调用
      1. package com.czxy.admin;
      2. import com.czxy.domain.Companys;
      3. import com.czxy.vo.BaseResult;
      4. import org.checkerframework.checker.units.qual.C;
      5. import org.springframework.core.ParameterizedTypeReference;
      6. import org.springframework.http.HttpMethod;
      7. import org.springframework.http.ResponseEntity;
      8. import org.springframework.stereotype.Component;
      9. import org.springframework.web.client.RestTemplate;
      10. import javax.annotation.Resource;
      11. import java.util.List;
      12. @Component
      13. public class AdminTest {
      14. @Resource
      15. private RestTemplate restTemplate;
      16. public List<Companys> list() {
      17. String url="http://localhost:8081/companys";
      18. ResponseEntity<BaseResult> entity = restTemplate.getForEntity(url, BaseResult.class);
      19. List<Companys> list = (List<Companys>) entity.getBody().getData();
      20. return list;
      21. }
      22. public BaseResult<Companys> selectById(String keyno) {
      23. String url="http://localhost:8081/companys/"+keyno;
      24. ResponseEntity<BaseResult<Companys>> resultResponseEntity = restTemplate.exchange(url, HttpMethod.GET, null, new ParameterizedTypeReference<BaseResult<Companys>>() {
      25. });
      26. return resultResponseEntity.getBody();
      27. }
      28. public void insert(Companys companys) {
      29. String url="http://localhost:8081/companys";
      30. RestTemplate restTemplate = new RestTemplate();
      31. ResponseEntity<BaseResult> entity = restTemplate.postForEntity(url, companys, BaseResult.class);
      32. }
      33. public Boolean delete(String keyno) {
      34. String url="http://localhost:8081/companys/"+keyno;
      35. RestTemplate restTemplate = new RestTemplate();
      36. restTemplate.delete(url);
      37. return true;
      38. }
      39. public void update(Companys companys) {
      40. String url="http://localhost:8081/companys";
      41. RestTemplate restTemplate = new RestTemplate();
      42. restTemplate.put(url,companys,BaseResult.class);
      43. }
      44. }

    最后进行测试

    http://localhost:8082/swagger-ui.html#/

       

     

      最后只要能调用到就说明你已经学会了哦~

     

                            


    想要了解更多吗?没时间解释了,快来点一点!!!
    程序员爱摸鱼🐟
    ————————————————
    版权声明:本文为CSDN博主「程序员爱摸鱼」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:
    https://blog.csdn.net/lcshen1234?type=blog

  • 相关阅读:
    Gooxi国鑫搭载第四代英特尔至强可扩展处理器系列服务器焕新登场
    Spring Boot接口设计规范
    [CTF] 2018-百越杯-Misc-血小板天下第一可爱
    小程序数据导出文件
    Window部署Jaeger
    HJ33整数与IP地址间的转换
    [网络工程师]-防火墙-防火墙体系
    携职教育:注会和中级哪个在体制内有用?
    Spring底层核心原理解析
    日常遇到的数据库上的常用排查命令
  • 原文地址:https://blog.csdn.net/lcshen1234/article/details/125438561