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

前期准备

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

整体架构

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

Spring Cloud项目(一)——集成Nacos作为注册中心_第1张图片

模块架构及代码

父模块: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>
子模块:springcloud-common

Spring Cloud项目(一)——集成Nacos作为注册中心_第2张图片
模块说明

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

代码说明
1、pom文件

    <dependencies>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
    </dependencies>

2、user实体

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User implements Serializable {
    private Integer userId;
    private String username;
    private Integer age;
}
子模块:springcloud-provider

Spring Cloud项目(一)——集成Nacos作为注册中心_第3张图片

模块说明

该模块主要提供项目的生产功能,是一个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>

2、yml文件

server:
  port: 8084
# 服务的名称  服务名称-ip映射
spring:
  application:
    name: nacos-provider
# 注册中心的地址
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848

3、启动类

Spring Cloud项目(一)——集成Nacos作为注册中心_第4张图片

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);
    }
}

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;
    }
}
子模块:springcloud-consumer

Spring Cloud项目(一)——集成Nacos作为注册中心_第5张图片

模块说明

该模块主要提供项目的消费功能,是一个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>

2、yml文件

server:
  port: 8081

spring:
  application:
    name: nacos-consumer
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848

3、启动类
Spring Cloud项目(一)——集成Nacos作为注册中心_第6张图片
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();
    }
}

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);

    }
}

测试结果

Spring Cloud项目(一)——集成Nacos作为注册中心_第7张图片

Spring Cloud项目(一)——集成Nacos作为注册中心_第8张图片

从上面两张图可以看出,我们成功的将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作为服务网关

你可能感兴趣的:(微服务,Spring实战,spring,cloud,java,spring,boot,nacos)