Spring Cloud Gateway+Nacos,yml+properties两种配置文件方式搭建网关服务

雨打夏夜 2020/4/25 22:15:01

写在前面网关的作用不在此赘述,举个最常用的例子,我们搭建了微服务,前端调用各服务接口时,由于各服务接口不一样,如果让前端同事分别调用,前端同事会疯的。而网关就可以解决这个问题,网关屏蔽了各业务服务的端口,对前端同事来说,他们只负责调用网关服务端口下的服务就可以了。本文简单描述如何使用

写在前面

网关的作用不在此赘述,举个最常用的例子,我们搭建了微服务,前端调用各服务接口时,由于各服务接口不一样,如果让前端同事分别调用,前端同事会疯的。而网关就可以解决这个问题,网关屏蔽了各业务服务的端口,对前端同事来说,他们只负责调用网关服务端口下的服务就可以了。本文简单描述如何使用Spring Cloud全家桶中的网关服务,再配以Nacos。关于Nacos简单应用,可以看我其他博客。

服务提供者

从https://start.spring.io/下载一个原始的spring boot工程,如何下载就不在这里说了。添加依赖:

 <dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-web</artifactId>
 </dependency>
 <dependency>
 <groupId>com.alibaba.cloud</groupId>
 <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
 <version>2.2.1.RELEASE</version>
 </dependency>
 <dependency>
 <groupId>com.alibaba.cloud</groupId>
 <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
 <version>2.2.1.RELEASE</version>
 </dependency> 

分别添加了web依赖、配置中心依赖和注册中心依赖。

配置文件如下:

 

 server.port=8070
spring.application.name=service-provider
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848 

 

启动类如下:

 package com.chris.springboot;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
@SpringBootApplication
@EnableDiscoveryClient
public class MySpringbootApplication {
</span><span style="color: #0000ff">public</span> <span style="color: #0000ff">static</span> <span style="color: #0000ff">void</span><span style="color: #000000"> main(String[] args) {
    SpringApplication.run(MySpringbootApplication.</span><span style="color: #0000ff">class</span><span style="color: #000000">, args);
}

} 

接口类如下:

 package com.chris.springboot.controller;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/provider")
@RefreshScope
public class ConfigController {
@Value(value </span>= "${Hello:123}"<span style="color: #000000">)
</span><span style="color: #0000ff">private</span><span style="color: #000000"> String hello;

 @GetMapping(</span>"/helloProvider"<span style="color: #000000">)
    </span><span style="color: #0000ff">public</span><span style="color: #000000"> String helloProvider(){
        </span><span style="color: #0000ff">return</span><span style="color: #000000"> hello;
    }

} 

此服务为我的博客:https://www.cnblogs.com/ncwuwsh/p/12732516.html中的服务,可参看。

网关服务

从https://start.spring.io/下载一个原始的spring boot工程,如何下载就不在这里说了。添加依赖:

      <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            <version>2.2.1.RELEASE</version>
        </dependency> 

注意,千万不要添加web依赖。

配置文件可以使用properties,也可以使用yml格式。yml格式如下:

 server:
  port: 8080
spring:
  application:
    name: api-gateway
  cloud:
    nacos: 
      discovery: 
        server-addr: 127.0.0.1:8848
    gateway:
      discovery:
        locator:
          enabled: true #表明gateway开启服务注册和发现的功能,并且spring cloud gateway自动根据服务发现为每一个服务创建了一个router,这个router将以服务名开头的请求路径转发到对应的服务。
          lower-case-service-id: true #是将请求路径上的服务名配置为小写(因为服务注册的时候,向注册中心注册时将服务名转成大写的了),比如以/service-hi/*的请求路径被路由转发到服务名为service-hi的服务上。
      routes:
        - id: gateway-service
          uri: lb://service-provider #此配置的值注册到Nacos中服务提供者的spring.application.name的值
          predicates:
            - Path=/provider/** 

使用yml的同学,一定要去查下yml的一些规则,比如 :后面,值的前面,一定要有空格,缩进不要使用tab键,而要用两个空格缩进等

下面是properties格式配置文件:

 server.port=8080
spring.application.name=api-gateway
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
#表明gateway开启服务注册和发现的功能,并且spring cloud gateway自动根据服务发现为每一个服务创建了一个router,这个router将以服务名开头的请求路径转发到对应的服务。
spring.cloud.gateway.discovery.locator.enabled=true
#是将请求路径上的服务名配置为小写(因为服务注册的时候,向注册中心注册时将服务名转成大写的了),比如以/service-hi/*的请求路径被路由转发到服务名为service-hi的服务上。
spring.cloud.gateway.discovery.locator.lower-case-service-id=true
spring.cloud.gateway.routes[0].id=gateway-service
spring.cloud.gateway.routes[0].uri=lb://service-provider
spring.cloud.gateway.routes[0].predicates[0]=Path=/provider/** 

下面是网关的启动类:

 package com.chris.gatewayrouter;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.gateway.route.RouteLocator;
import org.springframework.cloud.gateway.route.builder.RouteLocatorBuilder;
import org.springframework.context.annotation.Bean;
@SpringBootApplication
@EnableDiscoveryClient
public class GatewayrouterApplication {
</span><span style="color: #0000ff">public</span> <span style="color: #0000ff">static</span> <span style="color: #0000ff">void</span><span style="color: #000000"> main(String[] args) {
    SpringApplication.run(GatewayrouterApplication.</span><span style="color: #0000ff">class</span><span style="color: #000000">, args);
}

@Bean
</span><span style="color: #0000ff">public</span><span style="color: #000000"> RouteLocator myRoutes(RouteLocatorBuilder builder) {
    </span><span style="color: #0000ff">return</span><span style="color: #000000"> builder.routes().build();
}

} 

 

然后启动Nacos,服务提供者和网关服务,使用浏览器访问:http://127.0.0.1:8080/provider/helloProvider

搞定。

网关服务的其他高级应用,自己去看官网吧。

官网是最好的老师

 

随时随地学软件编程-关注百度小程序和微信小程序
关于找一找教程网

本站文章仅代表作者观点,不代表本站立场,所有文章非营利性免费分享。
本站提供了软件编程、网站开发技术、服务器运维、人工智能等等IT技术文章,希望广大程序员努力学习,让我们用科技改变世界。
[Spring Cloud Gateway+Nacos,yml+properties两种配置文件方式搭建网关服务]http://www.zyiz.net/tech/detail-130625.html

上一篇:SVM家族(一)

下一篇:关于强引用、软引用、弱引用、幻象引用,你该如何回答?

赞(0)

共有 条评论 网友评论

验证码: 看不清楚?
    关注微信小程序
    程序员编程王-随时随地学编程

    扫描二维码或查找【程序员编程王】

    可以随时随地学编程啦!

    技术文章导航 更多>
    扫一扫关注最新编程教程