0.版本
JDK:1.8
Spring Boot:2.6.13
spring-cloud-dependencies:2021.0.5
spring-cloud-alibaba-dependencies:2021.0.5.0
1.父工程搭建

我们创建一个spring boot项目作为父工程(也可以单独创建一个module,再引入spring boot依赖)

参考下面内容,填写必要信息,然后点击下一步。

然后来到下一步,这个地方我们选择的spring boot 版本是2.7.16,你可以根据自己的需要选择版本,版本对应关系参考文章参考下面这篇文章:https://www.longkui.site/program/java/spring-cloud-alibaba/6051/

注意,此处可以先随便选个版本,后面在pom文件中修改。本文后面选用spring boot的版本已经换成2.6.13

然后一直点击下一步直到创建完毕。

如果出现下面这种情况,Project ‘org.springframework.boot.spring-boot-starter-parent:2.7.16-SNAPSHOT’not found,点击上面的链接解决。

然后开始添加必要的依赖,我们打开父工程的pom文件,删除一些暂时用不到的依赖,然后引入必要依赖。

在前面搭建spring cloud netflix过程中,我们每个module都引入了自己的依赖,这篇文章我们使用dependencyManagement来管理依赖。

参考如下:

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <packaging>pom</packaging>
    <modules>
        <module>producer-1</module>
    </modules>
    <!--父工程-->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.6.13</version>
        <relativePath/>
    </parent>

    <groupId>site.longkui</groupId>
    <artifactId>s-cloud-alibaba</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>s-cloud-alibaba</name>
    <description>spring cloud alibaba demo</description>

    <!--依赖版本 -->
    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencyManagement>
        <dependencies>
            <!--spring cloud 依赖-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>2021.0.5</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!--spring cloud alibaba依赖 -->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>2021.0.5.0</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <!--插件依赖-->
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

2.创建生产者

我们首先创建第一个微服务模块,生产者。端口为:8010

右击父模块,新建—>新模块

我们定义生产者的名称,假设是producer-1

我们打开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>s-cloud-alibaba</artifactId>
        <groupId>site.longkui</groupId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>producer-1</artifactId>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>

</project>

我们在resources中创建配置文件application.yml,初始内容如下:

server:
  port: 8010 #服务的端口
#spring相关配置
spring:
  application:
    name: service-producer  #服务的名称

然后我们创建启动类

package site.longkui;


import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class producerApplication {
    public static void main(String[] args) {
        SpringApplication.run(producerApplication.class, args);
    }
}

创建controller层,并编写一个默认接口

package site.longkui.controller;


import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/user")
public class userController {

    @GetMapping("/getUser")
    public String getUser() {
        return "I`m producer 1 ,return user";
    }
}

我们启动生产者,测试一下接口:

http://localhost:8010/user/getUser
3.创建消费者

创建完了生产者的微服务,我们再来创建一个消费者的微服务。创建消费者的过程和生产者类似,我们假设端口是9010,命名为consumer-1。

我们在resources创建application.yml

server:
  port: 9010 #服务的端口
#spring相关配置
spring:
  application:
    name: service-consumer  #服务的名称

然后创建启动类:

package site.longkui;


import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class consumerApplication {
    public static void main(String[] args) {
        SpringApplication.run(consumerApplication.class, args);
    }
}

然后我们创建RestTemplate:

package site.longkui.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;

@Configuration
public class applicationRestTemplate {
    /**
     * 注册RestTemplate对象到Spring容器
     */
    @Bean
    public RestTemplate getRestTemplate() {
        return new RestTemplate();
    }
}

然后我们创建controller,并设置访问生产者的地址

package site.longkui.controller;


import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
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    consumerController {

    @Autowired
    private RestTemplate restTemplate;

    @GetMapping("/getUser")
    public  String getUser(){
        //指出服务地址
        String url="http://localhost:8010/user/getUser";
        //返回值类型和我们的业务返回值一致
        return restTemplate.getForObject(url, String.class);
    }
}

然后测试消费者访问生产者:

http://localhost:9010/consumer/getUser

可以看到,消费者调用生产者成功,返回生产者的数据。