• Spring Cloud项目(一)——集成Nacos作为注册中心


    前期准备

    本项目采用的是nacos2.1.0,所以需要一台安装nacos2.1.0的服务器
    【注意】如果你不是nacos2.1.0,请去官网找对应nacos版本的springboot/springcloud版本,避免出错

    整体架构

    这个项目主要以Maven项目和springboot项目为核心构成

    在这里插入图片描述

    模块架构及代码

    父模块:springcloud

    模块说明

    所有子模块的父模块,是一个Maven项目(去掉src)

    代码说明
    pom文件

    <modules>
            <module>springcloud-common</module>
            <module>springcloud-provider</module>
            <module>springcloud-consumer</module>
        </modules>
    
        <!--springboot信息-->
        <parent>
            <artifactId>spring-boot-starter-parent</artifactId>
            <groupId>org.springframework.boot</groupId>
            <version>2.2.2.RELEASE</version>
        </parent>
    
        <!--springcloud信息-->
        <dependencyManagement>
            <dependencies>
                <dependency>
                    <groupId>org.springframework.cloud</groupId>
                    <artifactId>spring-cloud-dependencies</artifactId>
                    <version>Hoxton.SR3</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
                <dependency>
                    <groupId>com.alibaba.cloud</groupId>
                    <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                    <version>2.2.0.RELEASE</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
            </dependencies>
        </dependencyManagement>
    
    • 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
    子模块:springcloud-common

    在这里插入图片描述
    模块说明

    该模块主要放置一些通用的代码,是一个Maven项目

    代码说明
    1、pom文件

        <dependencies>
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
            </dependency>
        </dependencies>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    2、user实体

    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    public class User implements Serializable {
        private Integer userId;
        private String username;
        private Integer age;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    子模块:springcloud-provider

    在这里插入图片描述

    模块说明

    该模块主要提供项目的生产功能,是一个springboot项目

    代码说明
    1、pom文件

        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-nacos-discovery</artifactId>
            </dependency>
            <dependency>
                <groupId>org.example</groupId>
                <artifactId>springcloud-common</artifactId>
                <version>1.0-SNAPSHOT</version>
            </dependency>
        </dependencies>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    2、yml文件

    server:
      port: 8084
    # 服务的名称  服务名称-ip映射
    spring:
      application:
        name: nacos-provider
    # 注册中心的地址
      cloud:
        nacos:
          discovery:
            server-addr: 127.0.0.1:8848
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    3、启动类

    在这里插入图片描述

    4、service

    package com.lx.service;
    
    import com.lx.User;
    import org.springframework.stereotype.Service;
    
    @Service
    public class UserService {
    
        public User findById(Integer userId){
            return new User(userId,"zs",20);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    5、controller

    package com.lx.controller;
    
    
    import com.lx.User;
    import com.lx.service.UserService;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.*;
    
    @RestController
    @RequestMapping("/user")
    public class UserController {
    
        private UserService userService;
    
        @Autowired
        public void setUserService(UserService userService) {
            this.userService = userService;
        }
    
        @RequestMapping("/findById/{userId}")
        public User findById(@PathVariable Integer userId){
            return userService.findById(userId);
        }
    
        @RequestMapping("/body")
        public String getBody(@RequestBody User user){
            return null;
        }
    
        // getName?userid=1&password=123
        @RequestMapping("/getParams")
        public String getParams(Integer userid, String password){
            return null;
        }
    }
    
    • 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
    子模块:springcloud-consumer

    在这里插入图片描述

    模块说明

    该模块主要提供项目的消费功能,是一个springboot项目

    代码说明
    1、pom文件

    <dependencies>
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-nacos-discovery</artifactId>
            </dependency>
            <dependency>
                <groupId>org.example</groupId>
                <artifactId>springcloud-common</artifactId>
                <version>1.0-SNAPSHOT</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-web</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
        </dependencies>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    2、yml文件

    server:
      port: 8081
    
    spring:
      application:
        name: nacos-consumer
      cloud:
        nacos:
          discovery:
            server-addr: 127.0.0.1:8848
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    3、启动类
    在这里插入图片描述
    4、配置类

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

    5、controller

    package com.lx.controller;
    
    
    import com.alibaba.nacos.client.naming.net.HttpClient;
    import com.lx.User;
    import org.springframework.beans.factory.annotation.Autowired;
    
    import org.springframework.cloud.client.ServiceInstance;
    import org.springframework.cloud.client.loadbalancer.LoadBalancerClient;
    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 UserController {
    
        // 1. 发请求到http://localhost:8080/user/findById/1  
        // 2. 负载均衡问题: nacos-provider(n个) 获取服务(nacos-provider/ip)
    
        /**
         * 发送请求
         */
        @Autowired
        private RestTemplate restTemplate;
    
        /**
         * 负载均衡
         */
        @Autowired
        private LoadBalancerClient client;
    
        @RequestMapping("/findById/{userId}")
        public User findById(@PathVariable Integer userId){
            // 根据注册到nacos上面名称,从众多的provider选择一个
            ServiceInstance instance = client.choose("nacos-provider");
            String url = "http://"+instance.getHost()+":"+instance.getPort()+"/user/findById/"+userId;
            return restTemplate.getForObject(url, User.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
    • 40
    • 41
    • 42

    测试结果

    在这里插入图片描述

    在这里插入图片描述

    从上面两张图可以看出,我们成功的将provider和consumer这两个服务注册到nacos上了,并且consumer成功的消费了provider的“产品”。

    结语

    下面关于Spring Cloud学习系列的博客的连接有的是不能使用的,因为博主还在努力创作中,敬请期待

    附:Spring Cloud学习系列

    Spring Cloud项目(一)——集成Nacos作为注册中心
    Spring Cloud项目(二)——集成Nacos作为配置中心
    Spring Cloud项目(三)——实现Nacos数据信息持久化到MySQL
    Spring Cloud项目(四)——使用Ribbon作为负载均衡
    Spring Cloud项目(五)——使用openFeign作为服务调用
    Spring Cloud项目(六)——使用sentinel作为流量管理
    Spring Cloud项目(七)——使用sentinel作为限流和熔断
    Spring Cloud项目(八)——使用gateway作为服务网关

  • 相关阅读:
    20240307-2-前端开发校招面试问题整理HTML
    想知道如何批量旋转图片?只要学会这两招就可以
    C语言——判断1~100中的奇数
    vue2与vue3的使用区别与组件通信
    Sqoop基本操作
    Nginx 面试 40 问与答
    Percona监控数据库解决方案
    AWK语言第二版 2.6个人库 2.7小结
    Thank you 我应该怎么去回应呢
    换掉 Postman + Swagger + JMeter,这 5 个 Java 项目绝了
  • 原文地址:https://blog.csdn.net/weixin_45974176/article/details/126404609