【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文件

 <parent>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-build</artifactId>
        <version>2.3.5.RELEASE</version>
    </parent>

    <properties>
        <spring.cloud.version>Hoxton.SR12</spring.cloud.version>
        <spring.cloud.alibaba.version>2.2.7-SNAPSHOT</spring.cloud.alibaba.version>
        <mybatis.plus.starter.version>3.4.0</mybatis.plus.starter.version>
        <durid.starter.version>1.1.10</durid.starter.version>
        <swagger.version>2.7.0</swagger.version>
        <jwt.jjwt.version>0.9.0</jwt.jjwt.version>
        <jwt.joda.version>2.9.7</jwt.joda.version>
    </properties>



    <dependencyManagement>
        <dependencies>
            <!-- Spring Dependencies -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring-boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring.cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>2.2.7.RELEASE</version>
                <type>pom</type>
            </dependency>

            <!-- mybatis-plus -->
            <dependency>
                <groupId>com.baomidou</groupId>
                <artifactId>mybatis-plus-boot-starter</artifactId>
                <version>${mybatis.plus.starter.version}</version>
            </dependency>

            <!-- Druid连接池 -->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid-spring-boot-starter</artifactId>
                <version>${durid.starter.version}</version>
            </dependency>

            <!--swagger2-->
            <dependency>
                <groupId>io.springfox</groupId>
                <artifactId>springfox-swagger2</artifactId>
                <version>${swagger.version}</version>
            </dependency>
            <dependency>
                <groupId>io.springfox</groupId>
                <artifactId>springfox-swagger-ui</artifactId>
                <version>${swagger.version}</version>
            </dependency>
        </dependencies>
    </dependencyManagement>

    2.2 创建子项目:company-data

  1.  环境
    
        <dependencies>
            <!--web起步依赖-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
    
            <!--swagger2-->
            <dependency>
                <groupId>io.springfox</groupId>
                <artifactId>springfox-swagger2</artifactId>
            </dependency>
            <dependency>
                <groupId>io.springfox</groupId>
                <artifactId>springfox-swagger-ui</artifactId>
            </dependency>
    
            <!--支持lombok-->
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
            </dependency>
    
            <dependency>
                <groupId>com.baomidou</groupId>
                <artifactId>mybatis-plus-boot-starter</artifactId>
                <version>3.4.0</version>
            </dependency>
            <!--MySQL数据库驱动-->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
            </dependency>
            <!--测试-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
            </dependency>
            <dependency>
                <groupId>com.czxy.</groupId>
                <artifactId>test-mybatis-plus</artifactId>
                <version>1.0-SNAPSHOT</version>
                <scope>test</scope>
            </dependency>
    
        </dependencies>
    

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

  3. 创建javaBean
    package com.czxy.domain;
    
    import com.baomidou.mybatisplus.annotation.TableId;
    import com.baomidou.mybatisplus.annotation.TableName;
    import lombok.AllArgsConstructor;
    import lombok.Data;
    import lombok.NoArgsConstructor;
    
    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    @TableName("companys")
    public class Companys {
        @TableId
        private  String keyno;
    
        private  String cname;
    
        private  String oper;
    
        private  String industry;
    }
    

  4. 创建CompanysContoller
    @RestController
    @RequestMapping("/companys")
    public class CompanysContoller {
        @Resource
        private CompanysMapper companysMapper;
    
        @GetMapping
        public BaseResult selectAll(){
            List<Companys> list = companysMapper.selectList(null);
            if(list ==null){
                return  BaseResult.error("查询失败");
            }
            return BaseResult.ok("查询成功",list);
        }
    
        @GetMapping("/{keyno}")
        public BaseResult selectById(@PathVariable("keyno") String keyno){
            Companys companys = companysMapper.selectById(keyno);
            if(companys ==null){
                return  BaseResult.error("查询失败");
            }
            return BaseResult.ok("查询成功",companys);
        }
        @PostMapping
        public BaseResult save(@RequestBody Companys companys){
            int insert = companysMapper.insert(companys);
            if(insert !=1){
                return  BaseResult.error("添加失败");
            }
            return BaseResult.ok("添加成功");
        }
        @DeleteMapping("/{keyno}")
        public BaseResult deleteById(@PathVariable("keyno") String keyno){
            int i = companysMapper.deleteById(keyno);
            if(i !=1){
                return  BaseResult.error("删除失败");
            }
            return BaseResult.ok("删除成功");
        }
    
        @PutMapping
        public BaseResult updata(@RequestBody Companys companys){
            int i = companysMapper.updateById(companys);
            if(i !=1){
                return  BaseResult.error("修改失败");
            }
            return BaseResult.ok("修改成功");
        }
    
    
    }
    

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

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

  2.2 创建子项目:company-http

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

  2. 创建javaBean
    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    public class Companys {
        private  String keyno;
    
        private  String cname;
    
        private  String oper;
    
        private  String industry;
    }

  3. 创建contoller
    @RestController
    @RequestMapping("/companys")
    public class CompanysContoller {
      @Resource
      private CompanysService companysService;
    
        @GetMapping
        public BaseResult selectAll() {
            List<Companys> list=companysService.list();
            return BaseResult.ok("查询成功",list);
        }
    
    
        @GetMapping("/{keyno}")
        public BaseResult selectById(@PathVariable("keyno") String keyno){
            BaseResult<Companys> user = companysService.getById(keyno);
            return  BaseResult.ok("查询成功",user);
        }
        @PostMapping
        public BaseResult save(@RequestBody Companys companys){
            try {
                companysService.insert(companys);
                return BaseResult.ok("添加成功");
            } catch (Exception e) {
                return  BaseResult.error(e.getMessage());
            }
        }
        @DeleteMapping("/{keyno}")
        public BaseResult deleteById(@PathVariable("keyno") String keyno){
            Boolean i = companysService.deleteById(keyno);
            if(i){
                return BaseResult.ok("删除成功");
            }
            return  BaseResult.error("删除失败");
        }
    
        @PutMapping
        public BaseResult updata(@RequestBody Companys companys){
            try {
                companysService.updateById(companys);
                return BaseResult.ok("修改成功");
            } catch (Exception e) {
                return  BaseResult.error(e.getMessage());
            }
        }
    
    
    }
    

  4. 创建service
    package com.czxy.service.impl;
    
    import com.czxy.admin.AdminTest;
    import com.czxy.domain.Companys;
    import com.czxy.service.CompanysService;
    import com.czxy.vo.BaseResult;
    import org.springframework.stereotype.Service;
    import org.springframework.transaction.annotation.Transactional;
    
    import javax.annotation.Resource;
    import java.util.List;
    
    @Service
    @Transactional
    public class CompanysServiceimpl implements CompanysService {
    
        @Resource
        private AdminTest adminTest;
        @Override
        public List<Companys> list() {
               List<Companys> list= adminTest.list();
            return list;
        }
    
        @Override
        public BaseResult<Companys> getById(String keyno) {
            BaseResult<Companys> userBaseResult = adminTest.selectById(keyno);
            return userBaseResult;
        }
    
        @Override
        public void insert(Companys companys) {
           adminTest.insert(companys);
    
        }
    
        @Override
        public Boolean deleteById(String keyno) {
            Boolean result=adminTest.delete(keyno);
            return result;
        }
    
        @Override
        public void updateById(Companys companys) {
          adminTest.update(companys);
        }
    }
    

  5. 创建admin进行远程调用
    package com.czxy.admin;
    
    import com.czxy.domain.Companys;
    import com.czxy.vo.BaseResult;
    import org.checkerframework.checker.units.qual.C;
    import org.springframework.core.ParameterizedTypeReference;
    import org.springframework.http.HttpMethod;
    import org.springframework.http.ResponseEntity;
    import org.springframework.stereotype.Component;
    import org.springframework.web.client.RestTemplate;
    
    import javax.annotation.Resource;
    import java.util.List;
    
    @Component
    public class AdminTest {
    
        @Resource
        private RestTemplate restTemplate;
    
    
        public List<Companys> list() {
            String url="http://localhost:8081/companys";
            ResponseEntity<BaseResult> entity = restTemplate.getForEntity(url, BaseResult.class);
            List<Companys> list = (List<Companys>) entity.getBody().getData();
            return  list;
        }
    
    
        public BaseResult<Companys> selectById(String keyno) {
            String  url="http://localhost:8081/companys/"+keyno;
            ResponseEntity<BaseResult<Companys>> resultResponseEntity = restTemplate.exchange(url, HttpMethod.GET, null, new ParameterizedTypeReference<BaseResult<Companys>>() {
            });
            return resultResponseEntity.getBody();
        }
    
        public void insert(Companys companys) {
            String url="http://localhost:8081/companys";
            RestTemplate restTemplate = new RestTemplate();
            ResponseEntity<BaseResult> entity = restTemplate.postForEntity(url, companys, BaseResult.class);
            
        }
    
        public Boolean delete(String keyno) {
            String url="http://localhost:8081/companys/"+keyno;
            RestTemplate restTemplate = new RestTemplate();
            restTemplate.delete(url);
            return true;
        }
    
        public void update(Companys companys) {
            String url="http://localhost:8081/companys";
            RestTemplate restTemplate = new RestTemplate();
            restTemplate.put(url,companys,BaseResult.class);
        }
    }
    

最后进行测试

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

   

 

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

 

                        


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

  • 61
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 105
    评论
JeeSpringCloud是一个基于SpringBoot2.0的后台权限管理系统,界面简洁美观敏捷开发系统架构。核心技术采用Spring、MyBatis、Shiro没有任何其它重度依赖。 互联网云快速开发框架,微服务分布式代码生成的敏捷开发系统架构。项目代码简洁,注释丰富,上手容易,还同时集中分布式、微服务,同时包含许多基础模块和监控、服务模块。模块包括:定时任务调度、服务器监控、平台监控、平台设置、开发平台、单点登录、Redis分布式高速缓存、会员、营销、在线用户、日志、在线人数、访问次数、调用次数、直接集群、接口文档、生成模块、代码实例、安装视频、教程文档 代码生成(单表、主附表、树表、列表和表单、redis高速缓存对接代码、图表统计、地图统计、vue.js)、dubbo、springCloudSpringBoot、mybatis、springspringmvc。 功能 用户管理:用户是系统操作者,该功能主要完成系统用户配置。 部门管理:配置系统组织机构(公司、部门、小组),树结构展现支持数据权限。 岗位管理:配置系统用户所属担任职务。 菜单管理:配置系统菜单,操作权限,按钮权限标识等。 角色管理:角色菜单权限分配、设置角色按机构进行数据范围权限划分。 字典管理:对系统中经常使用的一些较为固定的数据进行维护。 参数管理:对系统动态配置常用参数。 通知公告:系统通知公告信息发布维护。 操作日志:系统正常操作日志记录和查询;系统异常信息日志记录和查询。 登录日志:系统登录日志记录查询包含登录异常。 在线用户:当前系统中活跃用户状态监控。 定时任务:在线(添加、修改、删除)任务调度包含执行结果日志。 代码生成:前后端代码生成(单表、主附表、树表、列表和表单、增删改查云接口、redis高速缓存对接代码、图表统计、地图统计、vue.js) ,并生成菜单和权限直接使用。 系统接口:根据业务代码自动生成相关的api接口文档。 连接池监视:监视当期系统数据库连接池状态,可进行分析SQL找出系统性能瓶颈。 在线接口文档:使用swager生成在线文档。 ActiveMQ队列:提供ActiveMQ队列,处理批量发送大数据量邮件、大数据量日志文件。 工作流:功能包括在线办公、我的任务、审批测试、流程管理、模型管理。 CMS:功能包括内容管理、内容管理、统计分析、栏目设置、首页。 dubbo:代码生成直接生成dubbo对接代码。 服务器Down机邮件监控:通过定时任务监控服务器是否Down机,并发送通知邮件。 服务器监控:通过sigar进行服务器图形化监控。 异常邮件监控:全局拦截系统异常,并发送通知邮件。 单点登录:使用shior和Redis、共享session方式实现单点登录。 Redis分布式高速缓存:代码生成直接生成Redis对接代码。 特性: JeeSpringCloud基于SpringBoot+SpringMVC+Mybatis+Redis+SpringCloud+Vue.js微服务分布式代码生成的敏捷开发系统架构。项目代码简洁,注释丰富,上手容易,还同时集中分布式、微服务,同时包含许多基础模块(用户管理,角色管理,部门管理,字典管理等10个模块。成为大众认同、大众参与、成就大众、大众分享的开发平台。JeeSpring官方qq群(328910546)。代码生成前端界面、底层代码(spring mvc、mybatis、Spring boot、Spring Cloud微服务的生成)、安全框架、视图框架、服务端验证、任务调度、持久层框架、数据库连接池、缓存框架、日志管理、IM等核心技术。努力用心为大中小型企业打造全方位J2EE企业级平台ORM/Redis/Service仓库开发解决方案。一个RepositoryService仓库就直接实现dubbo、微服务、基础服务器对接接口和实现。 努力用心为大中小型企业打造全方位J2EE企业级平台开发解决方案。 Spring Boot/Spring cloud微服务是利用云平台开发企业应用程序的最新技术,它是小型、轻量和过程驱动的组件。微服务适合设计可扩展、易于维护的应用程序。它可以使开发更容易,还能使资源得到最佳利用。 微服务/集群(nignx) 支持REST风格远程调用(HTTP + JSON/XML):基于非常成熟的Spring Boot框架,在Spring Boot Spring Cloud中实现了REST风格(HTTP + JSON/XML)的远程调用,以显著简化企业内部的跨语言交互,同时显著简化企业对外的Open API、无线API甚至AJAX服务端等等的开发。 事实上,这个REST调用也使得Dubbo可以对当今特别流行的“微服务”架构提供基础性支持。 另外,REST调用也达到了比较高

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 105
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员爱摸鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值