服务消费微服务

2024-03-27 1541阅读

文章目录

    • 1.示意图
    • 2.环境搭建
        • 1.创建会员消费微服务模块
        • 2.删除不必要的两个文件
        • 3.检查父子模块的pom.xml文件
          • 1.子模块
          • 2.父模块
          • 4.pom.xml 添加依赖(刷新)
          • 5.application.yml 配置监听端口和服务名
          • 6.com/sun/springcloud/MemberConsumerApplication.java 创建启动类测试
          • 7.测试执行
            • 1.发现80端口被占用
            • 2.打开命令行输入 netstat -anb 查看是谁占用了80端口
            • 3.只能更换端口,使用 netstat -aon | findstr :81 来查看81端口被没被占用
            • 4.application.yml 更换端口和名字为81
            • 5.再次测试运行,成功在81端口监听
            • 6.浏览器请求测试
            • 7.更换项目名称为81(这样直接就知道这个服务在81端口监听)
            • 8.细节说明
              • 1.如果报错说数据库有问题,可能就是在pom.xml中保留了mybatis的依赖
              • 2.解决方案:启动类排除数据源自动配置
              • 3.代码实现
                  • 1.com/sun/springcloud/entity/Member.java 创建entity与会员中心模块保持一致
                  • 2.com/sun/springcloud/util/Result.java 创建Result工具类
                  • 3.RestTemplate 基本介绍
                  • 4.com/sun/springcloud/config/CustomizationBean.java 配置类注入RestTemplate的bean对象
                  • 5.com/sun/springcloud/controller/MemberConsumerController.java 作为会员中心微服务 save接口的中转站
                  • 6.启动两个微服务进行测试
                    • 1.首先启动会员中心微服务
                    • 2.启动服务消费微服务
                    • 3.postman测试
                    • 4.数据库信息
                    • 7.注意事项
                      • 1.RestTemplate发送请求的细节
                      • 2.entity实体类需要实现Serializable接口实现可序列化
                      • 3.在这个案例中
                      • 8.com/sun/springcloud/controller/MemberConsumerController.java 新增方法
                      • 9.postman测试
                      • 10.注意事项和细节
                        • 1.开启Run Dashboard/Service
                          • 1.打开 .idea/workspace.xml
                          • 2.粘贴配置代码到这里
                          • 3.配置代码
                          • 4.重启项目
                          • 5.查看Services
                          • 6.可以在这启动项目
                          • 7.启动之后的效果
                          • 2.关于微服务的细节
                            • 1.对微服务的理解
                            • 2.每个微服务接口的组成
                            • 4.创建一个共用模块
                                • 1.创建公共模块 e_commerce_center-common-api
                                • 2.检查父子的pom.xml
                                  • 1.子pom.xml
                                  • 2.父pom.xml
                                  • 3.pom.xml 引入依赖(刷新)
                                  • 4.抽取共用api
                                  • 5.maven打成jar包
                                  • 6.target目录生成jar包
                                  • 7.package和install的区别(部署项目的时候打包使用package)
                                  • 8.工程重构
                                    • 1.删除两个模块的Member和Result类,此时会报错
                                    • 2.两个模块的pom.xml都引入刚才的jar包
                                      • 1.查找公共模块jar包的坐标
                                      • 2.pom.xml分别引入jar包
                                      • 3.重启两个模块进行测试
                                        • 1.重启
                                        • 2.测试

                                          1.示意图

                                          服务消费微服务

                                          2.环境搭建

                                          1.创建会员消费微服务模块

                                          服务消费微服务

                                          2.删除不必要的两个文件

                                          服务消费微服务

                                          3.检查父子模块的pom.xml文件
                                          1.子模块

                                          服务消费微服务

                                          2.父模块

                                          服务消费微服务

                                          4.pom.xml 添加依赖(刷新)
                                              
                                                  
                                                  
                                                      org.springframework.boot
                                                      spring-boot-starter-web
                                                      
                                                  
                                                  
                                                  
                                                  
                                                      org.springframework.boot
                                                      spring-boot-starter-actuator
                                                  
                                                  
                                                  
                                                      org.projectlombok
                                                      lombok
                                                      true
                                                  
                                                  
                                                  
                                                      org.springframework.boot
                                                      spring-boot-starter-test
                                                      test
                                                  
                                              
                                          
                                          5.application.yml 配置监听端口和服务名
                                          server:
                                            port: 80 # 监听80端口
                                          spring:
                                            application:
                                              name: member-service-consumer-80
                                          
                                          6.com/sun/springcloud/MemberConsumerApplication.java 创建启动类测试
                                          package com.sun.springcloud;
                                          import org.springframework.boot.SpringApplication;
                                          import org.springframework.boot.autoconfigure.SpringBootApplication;
                                          /**
                                           * Description:
                                           *
                                           * @Author sun
                                           * @Create 2024/3/24 13:58
                                           * @Version 1.0
                                           */
                                          @SpringBootApplication
                                          public class MemberConsumerApplication {
                                              public static void main(String[] args) {
                                                  SpringApplication.run(MemberConsumerApplication.class, args);
                                              }
                                          }
                                          
                                          7.测试执行
                                          1.发现80端口被占用

                                          服务消费微服务

                                          2.打开命令行输入 netstat -anb 查看是谁占用了80端口

                                          服务消费微服务

                                          3.只能更换端口,使用 netstat -aon | findstr :81 来查看81端口被没被占用
                                          • 没有响应,说明没有被占用

                                            服务消费微服务

                                            4.application.yml 更换端口和名字为81
                                            server:
                                              port: 81 # 监听81端口
                                            spring:
                                              application:
                                                name: member-service-consumer-81
                                            
                                            5.再次测试运行,成功在81端口监听

                                            服务消费微服务

                                            6.浏览器请求测试

                                            服务消费微服务

                                            7.更换项目名称为81(这样直接就知道这个服务在81端口监听)

                                            服务消费微服务

                                            8.细节说明
                                            1.如果报错说数据库有问题,可能就是在pom.xml中保留了mybatis的依赖

                                            服务消费微服务

                                            2.解决方案:启动类排除数据源自动配置

                                            服务消费微服务

                                            3.代码实现

                                            1.com/sun/springcloud/entity/Member.java 创建entity与会员中心模块保持一致
                                            • 因为需要使用这个实体类来接收信息,然后调用会员中心模块
                                              package com.sun.springcloud.entity;
                                              import lombok.AllArgsConstructor;
                                              import lombok.Data;
                                              import lombok.NoArgsConstructor;
                                              import java.io.Serializable;
                                              /**
                                               * Description:
                                               *
                                               * @Author sun
                                               * @Create 2024/3/24 14:21
                                               * @Version 1.0
                                               */
                                              @AllArgsConstructor
                                              @NoArgsConstructor
                                              @Data
                                              //Serializable 加上,后面可能使用
                                              public class Member implements Serializable {
                                                  private Long id;
                                                  private String name;
                                                  private String pwd;
                                                  private String mobile;
                                                  private String email;
                                                  private Integer gender;
                                              }
                                              
                                              2.com/sun/springcloud/util/Result.java 创建Result工具类
                                              package com.sun.springcloud.util;
                                              /**
                                               * Description:
                                               *
                                               * @Author sun
                                               * @Create 2024/3/24 14:21
                                               * @Version 1.0
                                               */
                                              public class Result {
                                                  private String code;
                                                  private String msg;
                                                  private T data;
                                                  public String getCode() {
                                                      return code;
                                                  }
                                                  public void setCode(String code) {
                                                      this.code = code;
                                                  }
                                                  public String getMsg() {
                                                      return msg;
                                                  }
                                                  public void setMsg(String msg) {
                                                      this.msg = msg;
                                                  }
                                                  public T getData() {
                                                      return data;
                                                  }
                                                  public void setData(T data) {
                                                      this.data = data;
                                                  }
                                                  public Result() {
                                                  }
                                                  public Result(T data) {
                                                      this.data = data;
                                                  }
                                                  public static Result success() {
                                                      Result result = new Result();
                                                      result.setCode("200");
                                                      result.setMsg("success");
                                                      return result;
                                                  }
                                                  public static  Result success(T data) {
                                                      Result result = new Result(data);
                                                      result.setCode("200");
                                                      result.setMsg("success");
                                                      return result;
                                                  }
                                                  public static  Result success(String msg, T data) {
                                                      Result result = new Result(data);
                                                      result.setCode("200");
                                                      result.setMsg(msg);
                                                      return result;
                                                  }
                                                  public static Result error(String code, String msg) {
                                                      Result result = new Result();
                                                      result.setCode(code);
                                                      result.setMsg(msg);
                                                      return result;
                                                  }
                                                  public static  Result error(String code, String msg, T data) {
                                                      Result result = new Result(data);
                                                      result.setCode(code);
                                                      result.setMsg(msg);
                                                      return result;
                                                  }
                                              }
                                              
                                              3.RestTemplate 基本介绍

                                              服务消费微服务

                                              4.com/sun/springcloud/config/CustomizationBean.java 配置类注入RestTemplate的bean对象
                                              package com.sun.springcloud.config;
                                              import org.springframework.context.annotation.Bean;
                                              import org.springframework.context.annotation.Configuration;
                                              import org.springframework.web.client.RestTemplate;
                                              /**
                                               * Description: 配置类
                                               *
                                               * @Author sun
                                               * @Create 2024/3/24 14:32
                                               * @Version 1.0
                                               */
                                              @Configuration
                                              public class CustomizationBean {
                                                  /**
                                                   * 注入RestTemplate的bean对象
                                                   * @return
                                                   */
                                                  @Bean
                                                  public RestTemplate restTemplate() {
                                                      return new RestTemplate();
                                                  }
                                              }
                                              
                                              5.com/sun/springcloud/controller/MemberConsumerController.java 作为会员中心微服务 save接口的中转站
                                              package com.sun.springcloud.controller;
                                              import com.sun.springcloud.entity.Member;
                                              import com.sun.springcloud.util.Result;
                                              import org.springframework.web.bind.annotation.PostMapping;
                                              import org.springframework.web.bind.annotation.RestController;
                                              import org.springframework.web.client.RestTemplate;
                                              import javax.annotation.Resource;
                                              /**
                                               * Description: 作为会员中心微服务对member表操作的网关
                                               *
                                               * @Author sun
                                               * @Create 2024/3/24 14:42
                                               * @Version 1.0
                                               */
                                              @RestController
                                              public class MemberConsumerController {
                                                  /*
                                                  访问会员中心微服务的前缀
                                                   */
                                                  public static final String MEMBER_SERVICE_PROVIDER_URL = "http://localhost:10001";
                                                  /*
                                                  注入微服务之间通讯的RestTemplate的bean对象
                                                   */
                                                  @Resource
                                                  private RestTemplate restTemplate;
                                                  /**
                                                   * 向会员中心微服务的save接口发送请求,携带member对象,接受返回的结果Result并以json的格式返回给浏览器
                                                   *
                                                   * @param member 这里的参数必须是表单类型的,因为没有加@requestBody
                                                   * @return
                                                   */
                                                  @PostMapping("/member/consumer/save")
                                                  public Result save(Member member) {
                                                      // 注意:使用restTemplate发送请求时会将member转化为json格式的数据然后再发送请求,所以会员中心微服务的save接口必须加@requestBody注解
                                                      return restTemplate.postForObject(MEMBER_SERVICE_PROVIDER_URL + "/member/save", member, Result.class);
                                                  }
                                              }
                                              
                                              6.启动两个微服务进行测试
                                              1.首先启动会员中心微服务

                                              服务消费微服务

                                              2.启动服务消费微服务

                                              服务消费微服务

                                              3.postman测试

                                              服务消费微服务

                                              4.数据库信息

                                              服务消费微服务

                                              7.注意事项
                                              1.RestTemplate发送请求的细节
                                              • 通过RestTemplate发送请求携带的参数会自动转换为json格式的数据
                                              • 所以在接受RestTemplate的参数中必须要加@RequestBody注解
                                                2.entity实体类需要实现Serializable接口实现可序列化
                                                • 原因是使用RestTemplate传递参数时可能需要序列化
                                                  3.在这个案例中
                                                  • 参数并没有@RequestBody注解,所以需要通过表单传入数据
                                                    8.com/sun/springcloud/controller/MemberConsumerController.java 新增方法
                                                        /**
                                                         * 接受id为路径参数,向会员中心微服务模块的getMemberById接口发送请求,根据id获取信息
                                                         *
                                                         * @param id 请求参数
                                                         * @return 根据id返回json类型的数据
                                                         */
                                                        @GetMapping("/member/consumer/get/{id}") // 这里使用的路径参数
                                                        public Result getMemberById(@PathVariable("id") Long id) {
                                                            return restTemplate.getForObject(MEMBER_SERVICE_PROVIDER_URL + "/member/get/" + id, Result.class);
                                                        }
                                                    
                                                    9.postman测试

                                                    服务消费微服务

                                                    10.注意事项和细节
                                                    1.开启Run Dashboard/Service
                                                    1.打开 .idea/workspace.xml

                                                    服务消费微服务

                                                    2.粘贴配置代码到这里

                                                    服务消费微服务

                                                    3.配置代码
                                                      
                                                        
                                                        
                                                        
                                                        
                                                        
                                                        
                                                        
                                                        
                                                        
                                                        
                                                        
                                                        
                                                        
                                                        
                                                        
                                                      
                                                    
                                                    4.重启项目

                                                    服务消费微服务

                                                    5.查看Services

                                                    服务消费微服务

                                                    6.可以在这启动项目

                                                    服务消费微服务

                                                    7.启动之后的效果

                                                    服务消费微服务

                                                    2.关于微服务的细节
                                                    1.对微服务的理解
                                                    • 一个ip+端口就是一个微服务
                                                    • 访问微服务的方式是ip + 端口 + 上下文路径(可以是根目录)+ 资源路径
                                                      2.每个微服务接口的组成
                                                      • url
                                                      • 请求方式
                                                      • 参数
                                                      • 返回值

                                                        4.创建一个共用模块

                                                        1.创建公共模块 e_commerce_center-common-api

                                                        服务消费微服务

                                                        2.检查父子的pom.xml
                                                        1.子pom.xml

                                                        服务消费微服务

                                                        2.父pom.xml

                                                        服务消费微服务

                                                        3.pom.xml 引入依赖(刷新)
                                                            
                                                                
                                                                
                                                                    org.projectlombok
                                                                    lombok
                                                                    
                                                                    true
                                                                
                                                            
                                                        
                                                        4.抽取共用api

                                                        服务消费微服务

                                                        5.maven打成jar包

                                                        服务消费微服务

                                                        6.target目录生成jar包

                                                        服务消费微服务

                                                        7.package和install的区别(部署项目的时候打包使用package)
                                                        • package命令主要用于项目的编译和打包,但不会将产物安装到本地仓库,主要用于构建过程的测试和验证。
                                                        • install命令在执行package的基础上,进一步将打包后的文件安装到本地Maven仓库,便于其他项目的依赖引用。
                                                          8.工程重构
                                                          1.删除两个模块的Member和Result类,此时会报错

                                                          服务消费微服务

                                                          2.两个模块的pom.xml都引入刚才的jar包
                                                          1.查找公共模块jar包的坐标

                                                          服务消费微服务

                                                          2.pom.xml分别引入jar包
                                                                  
                                                                  
                                                                      org.example
                                                                      e_commerce_center-common-api
                                                                      1.0-SNAPSHOT
                                                                  
                                                          
                                                          3.重启两个模块进行测试
                                                          1.重启

                                                          服务消费微服务

                                                          2.测试

                                                          服务消费微服务

                                                          服务消费微服务

VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]