• 微服务springcloud入门系列三(创建服务消费者)


    前两篇springcloud入门系列文章已经创建好了Eureka注册中心和服务提供者,现在来创建服务消费者。

    在创建消费者之前,我们先启动好Eureka注册中心,在微服务架构中,通常会存在多个服务提供者来提供服务,为了方便让服务提供者使用不同的端口号来启动多个服务,我们可以在application.properties文件里把端口号改为读取启动参数的模式。

    server.port=${port}

     然后再通过配置启动参数来设置端口号(如上图所示),再分别启动8080和8081端口的服务提供者。

     启动好后,可以在注册中心看到两个服务提供者了。现在我们开始创建服务消费者,并以url = "http://user-service/user/"+id的形象来模拟负载均衡的方式来调用服务。

    这就是服务消费者的目录结构了。

    这是pom文件:

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>springcloud-parent</artifactId>
        <groupId>com.xiami</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    
    <artifactId>user-consumer</artifactId>
    
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
    </dependencies>
    </project>

    这是application.properties文件:

    server.port=8090
    spring.application.name=user-consumer
    eureka.client.service-url.defaultZone=http://localhost:8888/eureka

    这是服务消费者的启动文件,要注意的是需要在restTemplate方法里加入了@LoadBalanced标签,表示使用Ribbon负载均衡。

    package com.xiami;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
    import org.springframework.cloud.client.loadbalancer.LoadBalanced;
    import org.springframework.context.annotation.Bean;
    import org.springframework.web.client.RestTemplate;
    
    @SpringBootApplication
    @EnableDiscoveryClient
    public class UserConsumerApplication {
        public static void main(String[] args) {
            SpringApplication.run(UserConsumerApplication.class,args);
        }
    
        @Bean
        @LoadBalanced
        public RestTemplate restTemplate(){
            return new RestTemplate();
        }
    }

    我们接着写UserConsumerController文件:

    package com.xiami.controller;
    
    import com.xiami.entity.User;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.PathVariable;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    import org.springframework.web.client.RestTemplate;
    
    @RestController
    @RequestMapping("/consumer")
    public class UserConsumerController {
    
        @Autowired
        private RestTemplate restTemplate;
    
        @GetMapping("/{id}")
        public User queryById(@PathVariable Long id){
            String url = "http://user-service/user/"+id;
            return restTemplate.getForObject(url,User.class);
        }
    }
    User文件:
    package com.xiami.entity;
    
    public class User {
        private int id;
        private String username;
        private int age;
        private String ctm;
    
        public int getId() {
            return id;
        }
    
        public void setId(int id) {
            this.id = id;
        }
    
        public String getUsername() {
            return username;
        }
    
        public void setUsername(String username) {
            this.username = username;
        }
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    
        public String getCtm() {
            return ctm;
        }
    
        public void setCtm(String ctm) {
            this.ctm = ctm;
        }
    }

    所有文件都写好后,再启动消费者,最后访问localhost:8090/consumer/3,显示运行成功。

    我们也可以在服务提供者的方法里加一下打印日志,然后我们刷新几次上面的URL,就可以看到以间隔的效果来调用服务提供者了。

  • 相关阅读:
    JVM探秘1--JVM内存运行时区域划分
    skywalking学习之路---skywalking环境从零搭建部署
    ES6学习笔记之解构赋值
    ES6学习笔记之Symbol
    ES6学习笔记之块级作用域
    Vue开发警告[Vue warn]: Avoid replacing instance root $data. Use nested data properties instead.
    JavaScript实现归并排序
    Vue-cli3.x在开发环境中(router采用 history模式)出现Failed to resolve async component default: Error: Loading chunk {/d} failed.或者Uncaught SyntaxError: Unexpected token <错误
    vue-cli3.x中使用axios发送请求,配合webpack中的devServer编写本地mock数据接口(get/post/put/delete)
    uni-app开发微信小程序引入UI组件库(Vant-weapp)步骤
  • 原文地址:https://www.cnblogs.com/qq2083587182/p/14709916.html
Copyright © 2020-2023  润新知