1.搭建父工程

首先我们需要搭建一个父工程,打开IDEA,点击“新建”—>”项目”。选择“Spring Initializr”然后点击 下一步。

然后参考下面的内容,进行填写,填写完毕后,点击“下一步”。

然后来到下面这个界面,这个地方的选择一个是可以默认选择第一个,然后右面什么都不选,另外一种方式是可以选择创建Spring boot项目,然后删除掉多余部分。然后点击“下一步”。

然后下一步界面如下,点击 “完成”

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

然后添加必要依赖:

2.创建生产者

本文先创建一个生产者。

我们右击父工程,点击“新建”,“新模块”

然后选择 maven, 点击下一步

参考下面的图,填写必要内容,填写完毕后点击“完成”。

创建完毕后,整个项目结构如下:

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

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

(注:这个地方并没有立即声明服务注册中心的地址,在后面的文章才会开始配置)

生产者的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</artifactId>
        <groupId>site.longkui</groupId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

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


</project>

然后,我们参考下面代码手写一个启动类,名字是 sCloudProvider1,参考代码如下:

package site.longkui.scloudprovider1;

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

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

然后,我们创建controller层(本文只为了测试,不创建impl、dao等),参考代码如下:

package site.longkui.scloudprovider1.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 provider 1 ,return user";
    }
}

测试生产者:我们启动s-cloud-provider1,然后在浏览器里输入:

http://localhost:9001/user/getUser

生产者创建完毕。

3.创建消费者

创建消费者和前面比较类似,我们也是右击父工程,“新建”“新模块”创建一个消费者,名为 s-cloud-consumer1

然后resources文件下新建application.yml配置文件如下:

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

消费者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</artifactId>
        <groupId>site.longkui</groupId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

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


</project>

然后编写启动类,

package site.longkui.consumer1;

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

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

下面开始编写消费者接口,因为消费者要调用服务,所以要用到 RestTemplate,RestTemplate提供了多种便捷访问远程Http服务的方法,是一种简单便捷的访问restful服务的模板类,是spring提供的用于访问Rest服务的客户端模板工具集。

我们手写构建配置信息,创建一个config文件夹,然后参考下面内容进行填写。

package site.longkui.consumer1.config;

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

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

然後开始写消费者的controller

消费者参考代码如下:

package site.longkui.consumer1.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("/consumer1")
public class userConsumerController {
    @Autowired
    private RestTemplate restTemplate; // 提供多种便捷访问远程http服务的方法,简单的restful服务模板
    /**
     * 消费者接口
     */
    @GetMapping("/getUser")
    public  String getUser(){
        //指出服务地址
        String url="http://localhost:9001/user/getUser";
        //返回值类型和我们的业务返回值一致
        return restTemplate.getForObject(url, String.class);
    }
}

然后把生产者和消费者都启动。

4.生产者消费者调用测试

我们访问消费者的地址。

http://localhost:8001/consumer1/getUser

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