1.项目目录结构
2.创建项目名称为springcloud-001
pom.xml配置
4.0.0 org.springframework.boot spring-boot-starter-parent2.3.2.RELEASE com.xiao springcloud-0011.0 pom 1.8 2.3.2.RELEASE 2.2.6.RELEASE 2.2.6.RELEASE 2.2.6.RELEASE 2.2.6.RELEASE 2.2.6.RELEASE 1.8.1springcloud-provider springcloud-consumer springcloud-gateway springcloud-api com.alibaba.cloud spring-cloud-starter-alibaba-nacos-discoveryorg.projectlombok lombok1.18.20 provided com.alibaba.cloud spring-cloud-alibaba-dependencies${spring-cloud-dependencies} pom import com.alibaba.cloud spring-cloud-starter-alibaba-nacos-discovery${spring-cloud-nacos-version} org.springframework.cloud spring-cloud-starter-openfeign${spring-cloud-openfeign-version} org.springframework.cloud spring-cloud-starter-gateway${spring-cloud-gateway-version} com.alibaba.csp sentinel-core${ali-csp-version} com.alibaba.csp sentinel-transport-simple-http${ali-csp-version} org.springframework.boot spring-boot-maven-plugintrue repackage
3.创建网关项目,springcloud-gateway
pom.xml
4.0.0 com.xiao springcloud-0011.0 ../pom.xml com.xiao springcloud-gateway1.0 org.springframework.cloud spring-cloud-starter-gateway
application.yml
server:
port: 9001
spring:
application:
name: springcloud-gateway
cloud:
nacos:
discovery:
server-addr: 192.168.64.19:8848
gateway:
routes:
- id: springcloud-consumer
uri: lb://springcloud-consumer
predicates:
- Path=/consumer
@Slf4j
@Component
public class MusicClientFallbackFactory implements FallbackFactory {
@Override
public MusicServiceClient create(Throwable e) {
log.error("音乐服务接口异常,原因:{}", e.getMessage(), e);
return new MusicServiceClient() {
@Override
public String musicPlay(String musicPath) {
return "musicService服务器正在维护,请稍后再试!";
}
};
}
}
MusicServiceClient.java
package com.xiao.api.feign;
import com.xiao.api.constant.CloudServiceDefinitions;
import com.xiao.api.feign.factory.MusicClientFallbackFactory;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
@FeignClient(contextId = "musicClient",name= CloudServiceDefinitions.PROVIDER_SERVICE,
fallbackFactory = MusicClientFallbackFactory.class)
public interface MusicServiceClient {
@GetMapping("/provider/musicplay")
String musicPlay(@RequestParam String musicPath);
}
6.创建服务消费工程,springcloud-consumer
pom.xml
4.0.0 com.xiao springcloud-0011.0 ../pom.xml com.xiao springcloud-consumer1.0 org.springframework.boot spring-boot-starter-webcom.alibaba.cloud spring-cloud-starter-alibaba-sentinelcom.alibaba.csp sentinel-corecom.alibaba.csp sentinel-transport-simple-httpcom.alibaba.csp sentinel-web-servletcom.xiao springcloud-api1.0 compile
application.yml
server:
port: 9003
spring:
application:
name: springcloud-consumer
cloud:
nacos:
discovery:
server-addr: 192.168.64.19:8848
sentinel:
transport:
port: 8719
dashboard: 192.168.233.130:9090
main:
allow-bean-definition-overriding: true
feign:
sentinel:
enabled: true
PlayerController.java
package com.xiao.consumer.controller;
import com.xiao.api.feign.MusicServiceClient;
import com.xiao.api.feign.VideoServiceClient;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
@RestController
@Slf4j
public class PlayerController {
@Resource
private MusicServiceClient musicServiceClient;
@Resource
private VideoServiceClient videoServiceClient;
@RequestMapping("/consumer/musicplay")
public String musicplay(@RequestParam String musicPath){
log.info("musicplay 调用!");
return musicServiceClient.musicPlay(musicPath);
}
@RequestMapping("/consumer/videoplay")
public String videoplay(@RequestParam String videoPath){
log.info("videoplay 调用!");
return videoServiceClient.videoPlay(videoPath);
}
@GetMapping("hello")
public String hello(){
return "hello";
}
}
7.测试
分别启动服务gateway、provider、consumer
使用postMan测试接口:
http://localhost:9001/consumer/musicplay?musicPath=1
源码下载地址:
链接:https://pan.baidu.com/s/1717J8lOKNRqq-S7aTYOw_g
提取码:ez84



