上篇写了 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 ,关于配置中心和熔断降级 后续再补充