美文网首页
spring cloud alibaba 实战篇(二)——nac

spring cloud alibaba 实战篇(二)——nac

作者: 那一只羊 | 来源:发表于2020-05-21 16:37 被阅读0次

第一篇我们写了使用nacos作为配置中心

这一篇我们将使用nacos注册中心、服务的调用、负载均衡,不要眨眼

在payment-service模块pom.xml文件中添加:

修改payment-service模块的bootstrap.yml

新增红色框的部分哈

在启动类PaymentServiceApplication上添加@EnableDiscoveryClient

这个和springCloud一样

接下来我们重启下我们的payment-service服务,查看下nacos

我们可以看到,服务已经注册上去了

我们也可以再启动一个payment-service服务,会看到实例数增加到了2个

以上就是我们单个服务的注册演示。

接下来我们利用两个服务来搭建服务之间的调用、负载均衡


新建一个account-service模块,配置基本和payment-service差不多

application.yml:

bootstrap.yml

新建一个User.java实体:

public class User {

private int id;

    private Stringname;

    private Balancebalance;

    public User(){

}

public User(int id, String name) {

this.id = id;

        this.name = name;

    }

}

新建一个AccountController.java

@RestController

@RefreshScope

public class AccountController {

@Autowired

    private BalanceServicebalanceService;

    final static MapuserMap =new HashMap() {

{

put(1, new User(1, "张三"));

            put(2, new User(2, "李四"));

            put(3, new User(3, "王五"));

        }

};

    @RequestMapping("/acc/user")

public UsergetUser(@RequestParam Integer id) {

System.out.println("--查询用户--"+id);

        if (id !=null &&userMap.containsKey(id)) {

User user =userMap.get(id);

//填坑说明:原博客无这段代码(这里,大家可以把这行代码注释了之后,看看account-service服务是否正常访问)

            user.setBalance(balanceService.getBalance(id));

            return user;

        }

return new User(0, "");

    }

}

访问服务试试:

查看下nacos的服务情况

给两个服务添加feign和ribbon的依赖

在account-service服务的启动类中开启feign客户端功能;

在account-service模块中添加BalanceService接口

@Component

@FeignClient(name="payment-service",fallback = BalanceServiceFallBack.class)

public interface BalanceService {

@RequestMapping(value ="/pay/balance", method = RequestMethod.GET)

BalancegetBalance(@RequestParam("id") Integer id);

}

并提供一个BalanceService接口的实现类BalanceServiceFallBack

@Component

public class BalanceServiceFallBack   implements BalanceService{

@Override

    public BalancegetBalance(Integer id) {

return new Balance(0, 0, 0, "服务调用超时,执行降级!");

    }

}

接下来,我们试着用account-service服务中的getUser方法来调用到payment-service服务

通过account-service访问paymen-service遇到报错了--一脸懵逼,之前都好好的;瞬间想到后面用到sentinel的时候,添加sentinel主包导致的。但不定确定...排查中。。。

debug果然发现了问题,template中没有path这个方法。而是url...

然后就去找对应的包...

非常确定是jar包的版本问题....

为了找这个问题,我折腾了2个小时,换了好几个sentinel的版本都有问题,网上的各种版本匹配的博客也有问题,最后我退回代码,找到了问题所在,这里一定要注意下springCloud和boot版本,本文中已经为大家修正,不用管。

本文中用的是:

访问account-service看看能否获取的payment-service中的balance方法

在这里服务之间的调用到此结束

接下来,我们试试负载均衡,再启动一个payment-service服务(这里自己打个jar包跑起来),我们看看请求是否均摊到2个服务上。

服务2 服务2

可以看到,请求均摊到了不同的payment-service服务上了。

到这里本篇结束

spring cloud alibaba 实战篇(三)——sentinel服务降级

相关文章

网友评论

      本文标题:spring cloud alibaba 实战篇(二)——nac

      本文链接:https://www.haomeiwen.com/subject/ywkzohtx.html