SpringBoot+Nacos+Gateway实现一个端口调用多个不同服务

目录:

  1.SpringBoot+Nacos+OpenFeign实现服务的注册、发现、远程调用

  2.SpringBoot+Nacos+Gateway实现一个端口调用多个不同服务

  3.sentinel环境搭建及集合SpringBoot简单使用

一、概述(需要结合上一篇进行观看)

  上一篇博客实现了Nacos+openFeign实现了服务之间远程接口的调用。这一篇用网关整合多个服务,实现用户(客户端、网页、小程序、PC端)调用接口的统一化。举个例子来说:

  假如我们有两个服务:生产者服务和消费者服务。每个服务都有自己的ip和端口号。如果用户想要调用这两个服务的接口,势必要单独的去调用对应的服务(即通过ip+端口的形式去调用),此时看起来用户调用也不复杂,只需要维护两个ip地址和端口就行了。

  但是如果你有100个服务,此时怎么办,单独维护的成本就太高了。所以网关服务应运而生,它就是来统一维护各个服务的。统一整合后用户只需要调用网关的ip和端口,然后加上对应的接口地址即可自动调用对应的服务。非常方便。下面就去做一个简单的案例去集成它。

 

二、实现步骤

  1.在pom.xml中引入网关服务

<!--        引入网关 gateway-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
            <version>2.2.9.RELEASE</version>
        </dependency>

  2.在application.xml和bootstrap.xml中配置服务的发现和注册,并在application.xml中配置网关的id和路由

server:
  port: 8003

spring:
  application:
    name: tony-gateway

  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
        group: tony-group
    gateway:
      discovery:
        locator:
          enabled: true
          lower-case-service-id: true
      routes: #网关的路由
        - id: SERVICE-PROVIDER #可以随意写,但是最好和自己的服务名字对上
          uri: lb://tony-provider #lb代表负载均衡,后面是对对应服务的服务名称
          order: 1 #优先级
          predicates:
            - Path=/user/**  #匹配生产者路径,此处可以配置多个
        - id: SERVICE-CONSUMER
          uri: lb://tony-consumer
          order: 1
          predicates:
            - Path=/consumer/** #匹配消费者路径
spring:
  application:
    name: tony-gateway
  cloud:
    nacos:
      config:
        server-addr: 127.0.0.1:8848

  网关其实也是一个服务,如下图:

  最后测试一下执行结果:ps:其实本质上就是之前调用多个服务需要多个ip地址+端口,现在加上网关后调用多个服务只需要一个ip地址+端口号即可。

  1.消费者服务的调用结果(端口是8002)

 

  2.生产者服务的调用结果(端口是8001)

 

  3.用网关的调用结果(端口是8003)

 

 

posted on 2023-09-05 11:07  飘杨......  阅读(639)  评论(0编辑  收藏  举报