springCloud 整合 Nacos 注册中心,进行服务间的调用,gateway 网关拦截进行路由转发的实际操做应用

     上篇写了 nacos 的安装,这篇写一下以nacos为注册中心(没有使用配置中心的功能),进行服务调用,网关路由等的使用,首先看下各版本之间的对应关系git

本次代码 springboot 版本 2.1  springcloud 版本 Greenwich.SR5  springcloud alibaba 2.1 ,首先引入注册发现 远程调用github

<dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            <version>2.1.1.RELEASE</version>
        </dependency>

       <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>

而后在配置文件中,配置服务端口 服务名称,注册中心地址redis

server.port=8088
spring.application.name=service-provider
spring.cloud.nacos.discovery.server-addr=http://127.0.0.1:8848

而后依次启动下图中的三个服务spring

而后咱们在 nacos注册中心查看服务是否已注入springboot

点击详情,能够看到服务消费者的 ip 端口app

首先须要在启动类上开启注册中心 服务调用的注解ide

@EnableDiscoveryClient //服务注册
@EnableFeignClients //启用feign进行远程调用

服务提供者端口 8088,接下来咱们消费服务,FeignClient 后面的名字是调用服务的名字 RequestMapping 后面的名字是请求路径url

@FeignClient("service-provider")
public interface TestService {

    @RequestMapping("hello")
    public String  getHello();
}

咱们之间消费者调用提供者.net

/**
 * @version V1.0
 * @author: hqk
 * @date: 2020/5/18 17:06
 * @Description:
 */
@RestController
public class TestController {

    @Autowired
    private TestService testService;

    @RequestMapping("/hello")
    public String getHello(){

        return "hello";
    }

    @RequestMapping("/feign")
    public String  getFign(){

        return  "这里是经过远程调用返回的"+testService.getHello();
    }
}

接下来咱们经过网关去调用服务 网关端口 9999 网关须要定义路由规则code

server.port=9999
spring.application.name=service-gateway
spring.cloud.nacos.discovery.server-addr=http://127.0.0.1:8848

spring.cloud.gateway.routes[0].id=my_route
spring.cloud.gateway.routes[0].uri=lb://service-provider
spring.cloud.gateway.routes[0].predicates[0]=Path=/app/**
spring.cloud.gateway.routes[0].filters[0]=StripPrefix=1
spring.cloud.gateway.routes[0].filters[0].name=RequestRateLimiter
spring.cloud.gateway.routes[0].filters[0].args.key-resolver=#{@urlResolver}
spring.cloud.gateway.routes[0].filters[0].args.redis-rate-limiter.replenishRate=5
spring.cloud.gateway.routes[0].filters[0].args.redis-rate-limiter.burstCapacity=10
spring.cloud.gateway.routes[0].filters[1].name=Hystrix
spring.cloud.gateway.routes[0].filters[1].args.name=fallbackcmd
spring.cloud.gateway.routes[0].filters[1].args.fallbackUri=forward:/defaultfallback
# 路由 断言
spring.cloud.gateway.routes[1].id=my-consumer-service2
spring.cloud.gateway.routes[1].uri=lb://service-consumer
spring.cloud.gateway.routes[1].predicates[0]=Path=/admin/**
spring.cloud.gateway.routes[1].filters[0]=StripPrefix=1
# 限流
spring.cloud.gateway.routes[1].filters[0].name=RequestRateLimiter
spring.cloud.gateway.routes[1].filters[0].args.key-resolver=#{@urlResolver}
spring.cloud.gateway.routes[1].filters[0].args.redis-rate-limiter.replenishRate=1
spring.cloud.gateway.routes[1].filters[0].args.redis-rate-limiter.burstCapacity=1
# 熔断
spring.cloud.gateway.routes[1].filters[1].name=Hystrix
spring.cloud.gateway.routes[1].filters[1].args.name=fallbackcmd
spring.cloud.gateway.routes[1].filters[1].args.fallbackUri=forward:/defaultfallback
# redis
spring.redis.host=localhost
spring.redis.port=6379
spring.redis.database=0

#my-consumer-service.ribbon.listOfServers=127.0.0.1:8088,127.0.0.1:8099
#my-consumer-service.ribbon.NFLoadBalancerRuleClassName=com.netflix.loadbalancer.RoundRobinRule
# 熔断 服务调用超时时间 6s 默认 1s
hystrix.command.fallbackcmd.execution.isolation.thread.timeoutInMilliseconds=6000

上面咱们定义了,admin 开头的请求会去注册中心找服务消费者,咱们经过网关调用服务消费者,而后服务消费者去掉服务提供者

具体代码已上传到 点击github ,关于配置中心和熔断降级 后续再补充