SpringCloud结合Nacos注册中心及其熔断使用

  • Post author:
  • Post category:其他




导入springcloud和nacos依赖

<!--hystrix依赖,主要是用  @HystrixCommand  熔断技术-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
        </dependency>

        <!--服务注册-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <!--服务调用-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>



编写配置文件application.properties

#nacos服务地址端口号
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
server.port=8003
#该作为注册服务中心的名称
spring.application.name=service-vod
spring.profiles.active=dev

熔断的相关配置

#开启熔断器
feign.hystrix.enabled=true
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=6000



将需要调用和被调用的服务模块开启

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.context.annotation.ComponentScan;
@EnableDiscoveryClient
@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
@ComponentScan(basePackages = {"com.lmh"})
public class VodApplication {
    public static void main(String[] args) {
        SpringApplication.run(VodApplication.class,args);
    }
}

服务调用

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.annotation.ComponentScan;
@EnableFeignClients//服务调用
@EnableDiscoveryClient//nacos注册
@SpringBootApplication
@ComponentScan(basePackages = {"com.lmh"})//扫描其他模块的配置类,有com.lmh路径相同都可以
public class EduApplication {
    public static void main(String[] args) {
        SpringApplication.run(EduApplication.class,args);
    }



使用步骤

在服务调用的模块中建立接口


import com.lmh.commonutils.R;
import com.lmh.eduService.client.impl.VodClientImpl;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestParam;

import java.util.List;

/**
 * 熔断开启时,请求调用错误时,则调用实现类的方法
 */
@Component
@FeignClient(name = "service-vod",fallback = VodClientImpl.class)//加入需要调用服务名,注册中心中的命子
public interface VodClient {
    //上传视频
    @DeleteMapping("/eduVod/deleteAlyVideo/{id}")
    public R deleteAlyVideo(@PathVariable("id") String id);

    //删除多个视频
    @DeleteMapping("/eduVod/deleteAlyVideoList")
    public R deleteAlyVideoList(@RequestParam("videoIdList") List<String> listVideoIds);
}

写上需要调用服务的方法名(要求需要一样)

在写上该接口的实现类

import com.lmh.commonutils.R;
import com.lmh.eduService.client.VodClient;
import org.springframework.stereotype.Component;

import java.util.List;

@Component
public class VodClientImpl implements VodClient {
    @Override
    public R deleteAlyVideo(String id) {
        return R.error().message("请求超时");
    }

    @Override
    public R deleteAlyVideoList(List<String> listVideoIds) {
        return R.error().message("请求超时");
    }
}

此方法用于熔断时默认调用,当服务器宕机时,避免等待或者其他影响体验,采取熔断技术,阻断访问,直接调用自己写的实现类的方法

例如:请求超时的提示



版权声明:本文为weixin_44884861原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。