前面的博文已经叙述了如何将服务注册到nacos,今天这里说一下如何通过网关访问nacos上注册的服务。网关使用的是spring cloud gateway 。

  • 首先注册到nacos一个spring boot web服务,作为服务提供者。

  • 配置网关服务 

新建Spring boot项目,添加依赖

        <dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-gateway</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
		</dependency>
		<!--nacos服务注册与发现-->
		<!-- nacos 的服务注册与发现 -->
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
			<version>0.9.0.RELEASE</version>
		</dependency>

注册到nacos配置


spring:
  cloud:
    nacos:
      discovery:
        register-enabled: true
        server-addr: 192.168.0.254:8848 # nancos地址
  application:
    name: gateWay
server:
  port: 8081

启动类配置

package com.gateway.gateway;

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;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import reactor.core.publisher.Mono;

@EnableDiscoveryClient  // 启用服务注册和发现
@RestController  // 提供一个简单的降级页面
@SpringBootApplication
public class GatewayApplication {

	public static void main(String[] args) {
		SpringApplication.run(GatewayApplication.class, args);
	}
	/**
	 * @Title: fallback
	 * @Description: 一个简单的降级页面
	 * @return
	 */
	@RequestMapping("/fallback")
	public Mono<String> fallback() {
		// Mono是一个Reactive stream,对外输出一个“fallback”字符串。
		return Mono.just("fallback");
	}

	@Bean
	public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {
		return builder.routes()
				// 配制一个路由,把 http://网关地址:网关端口/demo/ 下的请求路由到 demo-service 微服务中
				.route(p -> p
						.path("/concurrent-test/**") //url匹配
						.uri("lb://concurrent-test"))  // 将请求路由到指定目标, lb开头是注册中心中的服务, http/https 开头你懂的
				.build();
	}

}
  • 启动网关服务

发现两个服务都已经注册到nacos

使用postman,请求网关,成功返回数据

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐