• 【SpringCloud学习笔记】服务提供者,服务消费者


    服务提供者和消费者

    一个是服务提供者,一个服务消费者
    在这里插入图片描述

    user-service

    • pom.xml添加依赖
    
     <dependency>
         <groupId>org.springframework.bootgroupId>
         <artifactId>spring-boot-starter-webartifactId>
     dependency>
     
     <dependency>
         <groupId>org.springframework.cloudgroupId>
         <artifactId>spring-cloud-starter-netflix-eureka-clientartifactId>
     dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • application.yml配置文件
    server:
      port: 9001
    spring:
      application:
        name: user-service
    eureka:
      instance:
        hostname: localhost
        #开启ip注册
        prefer-ip-address: true
      client:
        #默认值是true,是否将自己注册到注册中心
        register-with-eureka: true
        #默认值是true,是否从注册中心拉取服务
        fetch-registry: true
        #注册中信对外暴露的注册中心地址
        service-url:
          defaultZone: http://localhost:8761/eureka/
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 控制层代码
    @RestController
    public class UserController {
    
        @GetMapping(value = "/provider/test")
        public String test(){
            return "---我是用户服务提供者---";
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    启动服务者访问 http://localhost:9001/provider/test
    在这里插入图片描述

    user-consumer

    • pom.xml添加依赖
    <dependency>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-starter-webartifactId>
    dependency>
    <dependency>
        <groupId>org.springframework.cloudgroupId>
        <artifactId>spring-cloud-starter-netflix-eureka-clientartifactId>
    dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • application.ymal配置文件
    server:
      port: 9002
    spring:
      application:
        name: user-consumer
    eureka:
      instance:
        hostname: localhost
        #开启ip注册
        prefer-ip-address: true
      client:
        #默认值是true,是否将自己注册到注册中心
        register-with-eureka: true
        #默认值是true,是否从注册中心拉取服务
        fetch-registry: true
        #注册中信对外暴露的注册中心地址
        service-url:
          defaultZone: http://localhost:8761/eureka/
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 配置RestTemplate

    RestTemplate是Spring提供的用于访问Rest服务的客户端,RestTemplate提供了多种便捷访问远程Http服务的方法,能够大大提高客户端的编写效率,提供了不同的请求方试的接口供开发者使用

    @Configuration
    public class RestTemplateConfig {
        @Bean
        public RestTemplate restTemplate(){
            return new RestTemplate();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 控制层代码
    @RestController
    public class UserController {
        @Autowired
        private RestTemplate restTemplate;
        
        private static final String URL = "http://localhost:9001";
    
        @GetMapping(value = "/consumer/test")
        public String getString(){
           String str = restTemplate.getForObject(URL + "/provider/test", String.class);
           return "服务消费者调用服务提供者:" + str;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    启动消费者访问 http://localhost:9002/consumer/test
    在这里插入图片描述

    DiscoveryClient

    服务消费使用了restTemplate远程调用了服务提供者,我们只需要知道服务的地址以及返回值类型,就可以实现远程访问。springcloud中有一个类提供的api可以获取服务列表,服务地址,端口,它就是DiscoveryClient类

    @RestController
    public class UserController {
        @Autowired
        private RestTemplate restTemplate;
    
        @Autowired
        private DiscoveryClient discoveryClient;
    
        @GetMapping(value = "/discoveryClient")
        public String discoveryClientTest() {
            //获取服务列表
            List<String> services = discoveryClient.getServices();
            System.out.println("所有服务列表:" + services);
            //获取服务实例
            List<ServiceInstance> instances = discoveryClient.getInstances("user-service");
            ServiceInstance serviceInstance = instances.get(0);
            //拼接请求的地址
            String url = "http://" + serviceInstance.getHost() + ":" + serviceInstance.getPort();
            System.out.println("请求的url:" + url);
            return url;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    在这里插入图片描述

  • 相关阅读:
    安装nacos配置jdk
    10CQRS
    C语言题解——倒置字符串(剑指Offer 第58题)
    马斯克这波操作赢麻了?网友:这是我们玩剩下的
    项目上线给后端,axios请求路径修改
    SpringMvc源码分析-请求流程(一)
    SpringMVC 源码分析 以及手写简单的SpringMVC框架
    2022牛客暑期多校训练营4(ADHKLMN)
    You Are Given a Decimal String..(最短路,思维)
    Final Cut Pro 10.6.10中文用法儿
  • 原文地址:https://blog.csdn.net/qq_42494654/article/details/120247091