springcloud Alibaba


搬砖使用的是阿里的微服务框架,估计是Eureka后续不更新了,阿里的微服务框架发展势头更猛,现在趁有时间总结下。先使用,后续研究记录下原理等等。

一、nacos

实现分布式环境下的配置管理和服务注册发现,感觉是以前的Eureka与Config结合。

1、 安装(windows下)
Nacos:微服务配置中心、服务注册中心
环境要求:基础环境:JDK 1.8+;Maven 3.2.x+
Nacos版本:官方推荐稳定1.1.4版本
下载地址:https://github.com/alibaba/nacos/releases
文件 nacos-server-1.1.4.zip

2、 启动
解压后进入nacos\bin目录下双击startup.cmd启动,浏览器访问页面http://127.0.0.1:8848/nacos/index.html ,用户名密码皆为nacos,查看配置与注册的服务

二、使用步骤

1.实现配置管理

(1)引入依赖

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
    <version>2.0.1.RELEASE</version>
</dependency>

(2)在配置文件application.properties中配置nacos server的地址与应用名称,也可以是yml文件
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
spring.application.name=example
(3)在程序中使用@RefreshScope注解实现配置自动更新

@RestController
@RequestMapping("/config")
@RefreshScope
public class ConfigController {

    @Value("${useLocalCache:false}")
    private boolean useLocalCache;

    /**
     * http://localhost:8080/config/get
     */
    @RequestMapping("/get")
    public boolean get() {
        return useLocalCache;
    }
}

(4) 启动spring boot应用,调用接口http://localhost:8080/config/get,返回false

@SpringBootApplication
public class NacosConfigApplication {

    public static void main(String[] args) {
        SpringApplication.run(NacosConfigApplication.class, args);
    }
}

在这里插入图片描述
在管理页面更新配置并发布,重新调用接口http://localhost:8080/config/get,返回true,程序中useLocalCache动态更新了
在这里插入图片描述在这里插入图片描述


2.服务注册发现功能

nacos+openFeign 实现服务注册、服务调用

(1)依赖

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

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

(2)配置服务提供者service provider,服务提供者可以通过 Nacos 的服务注册发现功能将其服务注册到 Nacos server 上。

配置文件配置端口、服务名、nacos server服务端口

server.port=8090
spring.application.name=service-provider2
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848

通过注解 @EnableDiscoveryClient 开启服务注册发现功能
在这里插入图片描述

(3)配置服务消费者service consumer,服务消费者可以通过 Nacos 的服务注册发现功能从 Nacos server 上获取到它要调用的服务。

消费者工程中配置端口、应用名、nacos server 地址

server.port=9529
spring.application.name=service-openfeign
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848

通过注解 @EnableDiscoveryClient 开启服务注册发现功能,@FeignClient注解指定调用的服务名,@EnableFeignClients注解开启OpenFeign,可以直接使用remoteClient实例调用RemoteClient接口中的方法,RemoteClient可以继承服务提供者的接口。如果 Feign 接口定义跟启动类不在同一个包名下,还需要制定扫描的包名 @EnableFeignClients(basePackages=“com.fangjia.api.client”)
**大致原理是通过name在注册中心找到应用,获取name与ip、端口等信息。openFeign 实现了Ribbon负载均衡,所以会选择某台机器拼接url地址调用接口。**这里还能指定fallback,进行熔断或降级处理,后续记录下。在这里插入图片描述
启动类
在这里插入图片描述
(4)分别启动 服务消费者和 服务提供者应用 ,调用 http://localhost:9529/feign,返回内容为 你好,nacos!。
在这里插入图片描述
启动日志中可以看到服务已经注册成功
o.s.c.a.n.registry.NacosServiceRegistry : nacos registry, service-openfeign 192.168.0.101:9529 register finished
o.s.c.a.n.registry.NacosServiceRegistry : nacos registry, service-provider2 192.168.0.101:8090 register finished

Nacos server可以看到注册的服务
在这里插入图片描述


3.路由转发

nacos+gateway
(1)引入依赖

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

注意与springboot的依赖可能会有冲突,需要避免引入 spring-boot-starter-web 与spring-boot-starter-tomcat,否则启动失败

(2)gateway支持在配置文件application.properties中配置路由转发地址,也支持在代码中路由转发。
新建工程端口为18085,routeLocator是进行路由转发的方法,可以返回多个路由路径,routes表示多个路由,由route定义单个路由,path定义访问地址,真实访问时filters过滤
掉v1,仅调用**所指内容,url指向调用的服务地址,可配置为域名等。
application.properties

server.port=18085
spring.application.name=nacos-gateway
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
@SpringBootApplication
@EnableDiscoveryClient
public class GatewayApplication {
    @Bean
    public RouteLocator routeLocator(RouteLocatorBuilder builder) {
                  return builder.routes()
                          .route(r->r.path("/v1/**")
                                  .filters(f->f.stripPrefix(1))
                                 .uri("http://localhost:8090"))
                          .route(r->r.path("/v2/**")
                                  .filters(f->f.stripPrefix(1))
                                  .uri("http://localhost:9529"))
                          .build();
    }
    public static void main(String[] args) {
        SpringApplication.run(GatewayApplication.class, args);
    }
}

启动上一步服务注册发现建好的两个工程,nacos-gateway,nacos-openFeign以及nacos-provider2

顺便说一下,这些工程都能从nacos官网下载下来学习修改。在这里插入图片描述

调用接口,访问nacos-gateway提供的地址localhost:18085/v1,实际访问的是localhost:8090,实现了路由转发,项目里可以通过nginx转发至gateway,再通过gateway转发地址。

在这里插入图片描述
在这里插入图片描述
基于配置文件的路由配置:

spring:
  cloud:
    gateway:
      routes:
        - id: qq_route
          uri: http://qq.com
          order: 2
          predicates:
            - Path=/qq
          filters:
            - AddResponseHeader=hello, Gateway

补一个官网地址:https://github.com/alibaba/nacos

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值