文章目录

  • 前言
  • 微服务调用demo
  • 第一步、新建父工程
  • 第二步、服务生产者
  • 第三步、消费者
  • 消费者与生产者


前言

微服务调用小案例。

代码已共享至Gitee:https://gitee.com/lengcz/nacosdiscovery01.git

微服务调用demo

第一步、新建父工程

  1. 新建父工程
  2. 引入依赖(全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">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.it2</groupId>
    <artifactId>nacosdiscovery01</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>pom</packaging>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>

    <!--配置依赖管理-->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>2.1.0.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-dependencies -->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Greenwich.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

            <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-dependencies -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>2.1.3.RELEASE</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>

第二步、服务生产者

  1. 创建模块
  2. 引入依赖
<dependencies>
        <!--用于服务注册和发现-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--用于服务调用和负载均衡-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
    </dependencies>
  1. 创建配置文件application.yml
server:
  port: ${port:10001}
spring:
  application:
    name: provider
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
logging:
  level:
    root: info
    org.springframework: info
  1. 编写一个controller对外提供服务
@RestController
public class ProviderController {

    private static final Logger LOG= LoggerFactory.getLogger(ProviderController.class);

    @GetMapping("/service")
    public String service(){
        LOG.info("provider invoke");
        return "provider invoke";
    }
}
  1. 编写启动类
@SpringBootApplication
@EnableDiscoveryClient  //开启服务发现客户端
@EnableFeignClients     //开启Feign客户端
public class ProviderApp {

    public static void main(String[] args) {
        SpringApplication.run(ProviderApp.class,args);
    }
}
  1. 启动应用,查看nacos的服务列表,可以看到我们刚刚注册的provider服务,点击详情,可以看到客户端的列表。

代码结构(供参考)

nacos 服务通信 nacos微服务之间互相调用_spring

第三步、消费者

  1. 创建模块
  2. nacos 服务通信 nacos微服务之间互相调用_nacos_02

  3. 引入依赖
<dependencies>
        <!--用于服务注册和发现-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--用于服务调用和负载均衡-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
    </dependencies>
  1. 创建配置文件application.yml
server:
  port: ${port:10002}
spring:
  application:
    name: consumer
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
logging:
  level:
    root: info
    org.springframework: info
  1. 生产者的远程代理定义(通常我们将其定义在单独的包)
/**
 * 定义远程调用
 */
@FeignClient(value="provider")   //value值是注册到nacos的服务名
public interface ProviderClient {

    @GetMapping("/service")
    public String service();
}
  1. 消费者的实现
@RestController
public class ConsumerController {
    private static final Logger LOG= LoggerFactory.getLogger(ConsumerController.class);

    /**
     * 动态代理对象,内部远程调用生产者
     */
    @Autowired
    private ProviderClient providerClient;

    @GetMapping("/service")
    public String service(){
        LOG.info("consumer invoke");
        String result=providerClient.service(); //远程调用
        return "consumer invoke | "+result;
    }
}
  1. 编写启动类
@SpringBootApplication
@EnableDiscoveryClient  //开启服务发现客户端
@EnableFeignClients     //开启Feign客户端
public class ConsumerApp {

    public static void main(String[] args) {
        SpringApplication.run(ConsumerApp.class,args);
    }
}
  1. 启动并访问接口 http://127.0.0.1:10002/service
  2. nacos 服务通信 nacos微服务之间互相调用_nacos_03

  3. 后台可以查看到消费者也注册到了发现中心。
  4. nacos 服务通信 nacos微服务之间互相调用_ide_04

  5. 代码结构(供参考)
  6. nacos 服务通信 nacos微服务之间互相调用_ide_05


消费者与生产者

  • 一个微服务既可以做为生产者,也可以作为消费者,所以消费者的接口同样可以作为接口为其它微服务。
  • 不管是服务的生产者还是服务的消费者,都会把自己注册到服务的发现中心。