导入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 版权协议,转载请附上原文出处链接和本声明。