Spring Cloud Alibaba实战(二) - Nacos注册中心

目录

(一)Nacos动态配置
(二)Nacos注册中心
(三)Sentinel之限流
(四)Sentinel之熔断
(五)Gateway之路由、限流
(六)Gateway之鉴权、日志
(七)Gateway搭配Nacos实现动态路由
(八)Dubbo + Nacos

正文

Nacos作为配置中心的表现可圈可点,下面继续探探作为注册中心的斤两。

上一节编写了payment-service,提供查询余额接口,现在把该服务注册到Nacos,仅需三步。

1 添加依赖

        
            org.springframework.cloud
            spring-cloud-starter-alibaba-nacos-discovery
            ${alibaba.version}
        

2 配置Nacos发现服务地址

修改后的bootstrap.yml如下

spring:
  application:
    name: payment-service
  cloud:
    nacos:
      config:
        server-addr: 127.0.0.1:8848
      discovery:
        server-addr: 127.0.0.1:8848

3 在启动类上添加注解@EnableDiscoveryClient

@SpringBootApplication
@EnableDiscoveryClient
public class PaymentServiceApplication {

重新启动应用

控制台中输出

nacos registry, payment-service 192.168.12.22:8082 register finished

进入Nacos管理后台,在服务列表中已经可以看到payment-service服务(服务名为spring.application.name)

Spring Cloud Alibaba实战(二) - Nacos注册中心_第1张图片

执行mvc clean package把应用打成jar包并在8082和8083端口上启动两个实例,命令如下:

java -jar payment-service-0.0.1-SNAPSHOT.jar --server.port=8082
java -jar payment-service-0.0.1-SNAPSHOT.jar --server.port=8083

 回到Nacos后台查看,可以看到两个实例信息

Spring Cloud Alibaba实战(二) - Nacos注册中心_第2张图片

至此,服务Provider的工作完成,下面来写Consumer。

Consumer为账号服务,提供注册、登录等,其中部分接口需要调用payment-service服务获得余额信息合并后返回给客户端。

新建名称为account-service的SpringBoot应用,依赖、配置文件与payment-service基本相同,仅修改以下两项:

spring.application.name=account-service
server.port=8081

业务代码:

User.java

public class User {

    private int id;
    private String name;
    private Balance balance;

    public User(int id, String name) {
        this.id = id;
        this.name = name;
    }

    public User() {
    }

    //setter/getter略
}
AccountController.java
@RestController
public class AccountController {

    final static Map userMap = new HashMap() {{
            put(1, new User(1, "张三"));
            put(2, new User(2, "李四"));
            put(3, new User(3, "王五"));
        }
    };

    @RequestMapping("/acc/user")
    public User getUser(@RequestParam Integer id) {
        if(id != null && userMap.containsKey(id)) {
            User user = userMap.get(id);
            return user;
        }
        return new User(0, "");
    }
}

测试

接下来添加调用payment-service服务的代码。添加相关依赖,如下:


        1.8
        Greenwich.SR1
        0.9.0.RELEASE
        2.1.1.RELEASE
        2.1.1.RELEASE
    

    
        
            org.springframework.boot
            spring-boot-starter-web
        

        
            org.springframework.cloud
            spring-cloud-starter-alibaba-nacos-config
            ${alibaba.version}
        

        
            org.springframework.cloud
            spring-cloud-starter-alibaba-nacos-discovery
            ${alibaba.version}
        

        
            org.springframework.cloud
            spring-cloud-starter-netflix-ribbon
        

        
            org.springframework.cloud
            spring-cloud-starter-openfeign
        

        
            org.springframework.boot
            spring-boot-starter-test
            test
        
    

    
        
            
                org.springframework.cloud
                spring-cloud-dependencies
                ${spring-cloud.version}
                pom
                import
            
            
                org.springframework.cloud
                spring-cloud-openfeign-dependencies
                ${spring-cloud-openfeign.version}
                pom
                import
            
        
    

在主类上开启Feign功能

@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class AccountServiceApplication {

添加BalanceService接口

@FeignClient(name = "payment-service", fallback = BalanceServiceFallback.class)
public interface BalanceService {

    @RequestMapping(value = "/pay/balance", method = RequestMethod.GET)
    Balance getBalance(@RequestParam("id") Integer id);
}

添加BalanceServiceFallback.java

@Component
public class BalanceServiceFallback implements BalanceService {
    @Override
    public Balance getBalance(Integer id) {
        return new Balance(0, 0, 0, "降级");
    }
}

测试

返回值中已经包含balance信息。观察两个payment-service两个实例的控制台窗口,可以看到请求被平均分配。

Spring Cloud Alibaba实战(二) - Nacos注册中心_第3张图片

关闭一个payment-service实例测试,服务仍然可用。那么如果两个都关闭呢?

Spring Cloud Alibaba实战(二) - Nacos注册中心_第4张图片

报错了,看来程序需要继续完善,是Sentinel登场的时候了。

在account-service中添加依赖

        
            org.springframework.cloud
            spring-cloud-starter-alibaba-sentinel
            ${alibaba.version}
        

在bootstrap.yml中启用

feign:
  sentinel:
    enabled: true

重启应用并测试:

降级成功。

当然,Sentinel远不止这点本事,下一节将开始它的表演。

本期源码:
https://download.csdn.net/download/autfish/11178291

你可能感兴趣的:(Spring,Cloud)