• SpringCloud-5-基础工程-创建服务服务消费者


    4.6 搭建服务消费者
    • 服务消费者即客户端,工程整体结构

    在这里插入图片描述

    • 在父工程 spring-cloud-microservice下,创建一个名为 microservice-cloud-consumer-dept-80 的微服务(Spring Boot Module),并在其 pom.xml 中引入所需的依赖,代码如下。
    • 80是http默认端口号且消费者不应该有service层,只要在controller中获取到provider的请求地址即可访问服务
    
    
        4.0.0
        
        
            spring-cloud-microservice
            org.example
            1.0-SNAPSHOT
        
        com.example
        microservice-cloud-consumer-dept-80
        0.0.1-SNAPSHOT
        microservice-cloud-consumer-dept-80
        Demo project for Spring Boot
        
            1.8
        
        
        
            
            
                org.example
                microservice-cloud-api
                1.0-SNAPSHOT
            
            
            
                org.springframework.boot
                spring-boot-starter-web
                
                    
                        org.springframework.boot
                        spring-boot-starter-tomcat
                    
                
            
            
            
                org.springframework.boot
                spring-boot-devtools
                runtime
                true
            
            
            
                org.projectlombok
                lombok
                true
            
            
            
                org.springframework.boot
                spring-boot-starter-test
                test
            
            
            
                org.springframework.boot
                spring-boot-starter-jetty
            
            
            
                org.springframework
                springloaded
                1.2.8.RELEASE
            
            
            
                org.apache.logging.log4j
                log4j-core
            
            
                ch.qos.logback
                logback-core
            
        
    
        
            
                
                    org.springframework.boot
                    spring-boot-maven-plugin
                    
                        
                            
                                org.projectlombok
                                lombok
                            
                        
                    
                
            
        
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 在类路径(即 /resource 目录)下,新建一个配置文件 application.yml,配置内容如下
    server:
      port: 80
    
    • 1
    • 2
    • 在 com.example.config 包下,创建一个名为 ConfigBean 的配置类,将 RestTemplate 注入到容器中,代码如下。

    RestTemplate 是一种简单便捷的访问 restful 服务模板类,是 Spring 提供的用于访问 Rest 服务的客户端模板工具集,提供了多种便捷访问远程 HTTP 服务的方法

    package com.example.config;
    
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.web.client.RestTemplate;
    
    @Configuration
    public class ConfigBean {
        @Bean
        public RestTemplate restTemplate(){
            return new RestTemplate();
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    restTemplate已经简化了底层通信的方法,只是为了高效开发才有了Feign这样的组件

    • 在com.example.controller下创建一个名为 DeptConsumerController的 Controller,该 Controller 中定义的请求用于调用服务端提供的服务,代码如下。
    package com.example.controller;
    
    import com.zk.springcloud.entity.Dept;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.*;
    import org.springframework.web.client.RestTemplate;
    
    import java.util.List;
    
    @RestController
    public class DeptConsumerController {
    
        //这种方式是直调用服务方的方法,根本没有用到 Spring Cloud
        private static final String REST_URL_PROVIDER_PREFIX = "http://localhost:8001";
    
        //RestTemplate 是一种简单便捷的访问 restful 服务模板类,是 Spring 提供的用于访问 Rest 服务的客户端模板工具集,提供了多种便捷访问远程 HTTP 服务的方法
        // 消费者不应该有service层,只要在controller中获取到provider的请求地址即可访问服务
        //RestTemplate....供我们直接调用就可以了!注册到spring中
        //(String url, Class responseType, Map uriVariables)亲求实体
        @Autowired
        private RestTemplate template;
    
        //不同于rpc那种DubboReference引用服务提供者的service,rpc是 接口调用 通过 反射
        //获取指定部门信息
        @GetMapping("/consumer/dept/get/{id}")
        public Dept getDeptById(@PathVariable("id") Integer id){
            return template.getForObject(REST_URL_PROVIDER_PREFIX+"/dept/get/"+id,Dept.class);
        }
        //获取部门列表
        @GetMapping("/consumer/dept/list")
        public List getDepts(){
            return template.getForObject(REST_URL_PROVIDER_PREFIX+"/dept/list",List.class);
        }
    
        @RequestMapping("/consumer/dept/add")
        public boolean addDept(Dept dept){
            return template.postForObject(REST_URL_PROVIDER_PREFIX+"/dept/add",dept,Boolean.class);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39

    在消费者中通过http访问其他微服务的控制层,这样完成多服务器服务解耦(因为可以更换访问路径)

    参数可以通过3中方式传输,一种是分装成map,一种是实体类,另一种是在url路径携带

    • 测试,先启动服务提供者的启动类,然后在启动服务消费者的启动类

    • 访问http://127.0.0.1/consumer/dept/list测试结果

    在这里插入图片描述

    • 访问http://127.0.0.1/consumer/dept/get/1测试结果,说明服务消费者运行正常

    在这里插入图片描述

    • 注意:在服务提供者项目中使用http://127.0.0.1:8001/dept/add?deptName=销售部是无法添加进去的,而在消费者项目中使用了rest风格的请求则可以添加成功

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    下一篇:SpringCloud-6-pom文件中常用的标签
  • 相关阅读:
    JAVA计算机毕业设计在线云音乐系统Mybatis+源码+数据库+lw文档+系统+调试部署
    自然语言处理应用(二):自然语言推断
    mysql5.7免安装版本
    Druid 查询超时配置的探究 → DataSource 和 JdbcTemplate 的 queryTimeout 到底谁生效?
    0~n-1缺失的数字(注意尾巴也有可能)
    Java HashMap 实现线程安全
    运行yolov5 v6遇到的问题
    代理IP和Socks5代理在游戏领域的重要应用
    【目标检测论文解读复现NO.34】基于改进 YOLOv5s 的苹果叶片小目标病害轻量化检测方法
    支持流畅运行win10的最低配置是什么
  • 原文地址:https://blog.csdn.net/weixin_42045639/article/details/126821232