nacos的使用

1,项目目录结构

在这里插入图片描述

2,服务提供者

1,依赖
 <!-- 服务注册discovery -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            <version>2.2.1.RELEASE</version>
        </dependency>

2,启动类

@SpringBootApplication
@EnableDiscoveryClient
public class App {
    public static void main(String[] args) {
        SpringApplication.run(App.class, args);
    }

	//被调用的方法
    @RestController
    class EchoController {
        @RequestMapping(value = "/echo/{string}", method = RequestMethod.GET)
        public String echo(@PathVariable String string) {
            return "Hello Nacos Discovery " + string;
        }
    }
}

3,配置文件

server.port=8080
spring.application.name=service-provider
spring.cloud.nacos.discovery.server-addr=localhost:8848
spring.profiles.active=dev

3,服务的使用者(feign)

1,依赖

 <dependencies>
        <!-- 服务注册discovery -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            <version>2.2.1.RELEASE</version>
        </dependency>

        <!-- 服务调用openfeign -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
            <version>2.2.3.RELEASE</version>
        </dependency>
    </dependencies>

2,启动类

@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class App2 {
    public static void main(String[] args) {
        SpringApplication.run(App2.class, args);
    }
}

3,调用使用的接口
@FeignClient的参数为被调用的服务名

@Component
@FeignClient("service-provider")
public interface OrdersClient {
    //和服务提供者的方法全路径相同
    @GetMapping("/echo/{string}")
    public String echo(@PathVariable("string") String string);
}

4,使用


@Controller
public class TestController {
    @Autowired
    private OrdersClient ordersClient;
    @RequestMapping("getString")
    @ResponseBody
    public String getString(){
        String echo = ordersClient.echo("666");
        return echo;
    }
}

4,熔断(hystrix)

在一个分布式系统里,许多依赖不可避免的会调用失败,比如超时、异常等,如何能够保证在一个依赖出问题的情况下,不会导致整体服务失败,这个就是Hystrix需要做的事情。Hystrix提供了熔断、隔离、Fallback、cache、监控等功能,能够在一个、或多个依赖同时出现问题时保证系统依然可用。

1,依赖
其中ribbon起到了负载均衡的作用

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
            <version>2.2.3.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
            <version>2.2.3.RELEASE</version>
        </dependency>

2,orderClient接口
name 属性指定服务名,此处结合ribbon可实现负载
fallback 指定服务挂掉时执行的实现类

@Component
@FeignClient(name = "service-provider",fallback = OrdersClientImpl.class)
public interface OrdersClient {
    //和服务提供者同名方法
    @GetMapping("/echo/{string}")
    public Integer echo(@PathVariable("string") String string);
}

2,实现orderclient的实现类OrdersClientImpl,当service-provider挂掉时,自动执行。

@Component
public class OrdersClientImpl implements OrdersClient {
    @Override
    public Integer echo(String string) {
        return 404;
    }
}

Spring Cloud Ribbon是一个基于HTTP和TCP的客户端负载均衡工具,它基于Netflix Ribbon实现。通过Spring Cloud的封装,可以让我们轻松地将面向服务的REST模版请求自动转换成客户端负载均衡的服务调用。Spring Cloud Ribbon虽然只是一个工具类框架,它不像服务注册中心、配置中心、API网关那样需要独立部署,但是它几乎存在于每一个Spring Cloud构建的微服务和基础设施中。因为微服务间的调用,API网关的请求转发等内容,实际上都是通过Ribbon来实现的,包括后续我们将要介绍的Feign,它也是基于Ribbon实现的工具。所以,对Spring Cloud Ribbon的理解和使用,对于我们使用Spring Cloud来构建微服务非常重要。
在这一章中,我们将具体介绍如何使用Ribbon来实现客户端的负载均衡,并且通过源码分析来了解Ribbon实现客户端负载均衡的基本原理。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值