1.项目目录结构

2.创建项目名称为springcloud-001
pom.xml配置
- <project xmlns="http://maven.apache.org/POM/4.0.0"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0modelVersion>
-
- <parent>
- <groupId>org.springframework.bootgroupId>
- <artifactId>spring-boot-starter-parentartifactId>
- <version>2.3.2.RELEASEversion>
- parent>
-
- <groupId>com.xiaogroupId>
- <artifactId>springcloud-001artifactId>
- <version>1.0version>
-
-
- <packaging>pompackaging>
-
- <properties>
- <java.version>1.8java.version>
- <spring-boot-version>2.3.2.RELEASEspring-boot-version>
- <spring-cloud-version>2.2.6.RELEASEspring-cloud-version>
- <spring-cloud-dependencies>2.2.6.RELEASEspring-cloud-dependencies>
- <spring-cloud-nacos-version>2.2.6.RELEASEspring-cloud-nacos-version>
- <spring-cloud-openfeign-version>2.2.6.RELEASEspring-cloud-openfeign-version>
- <spring-cloud-gateway-version>2.2.6.RELEASEspring-cloud-gateway-version>
- <ali-csp-version>1.8.1ali-csp-version>
- properties>
-
-
- <modules>
- <module>springcloud-providermodule>
- <module>springcloud-consumermodule>
- <module>springcloud-gatewaymodule>
- <module>springcloud-apimodule>
- modules>
-
-
- <dependencies>
-
- <dependency>
- <groupId>com.alibaba.cloudgroupId>
- <artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>
- dependency>
-
- <dependency>
- <groupId>org.projectlombokgroupId>
- <artifactId>lombokartifactId>
- <version>1.18.20version>
- <scope>providedscope>
- dependency>
-
- dependencies>
-
-
- <dependencyManagement>
- <dependencies>
- <dependency>
- <groupId>com.alibaba.cloudgroupId>
- <artifactId>spring-cloud-alibaba-dependenciesartifactId>
- <version>${spring-cloud-dependencies}version>
- <type>pomtype>
- <scope>importscope>
- dependency>
-
- <dependency>
- <groupId>com.alibaba.cloudgroupId>
- <artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>
- <version>${spring-cloud-nacos-version}version>
- dependency>
-
- <dependency>
- <groupId>org.springframework.cloudgroupId>
- <artifactId>spring-cloud-starter-openfeignartifactId>
- <version>${spring-cloud-openfeign-version}version>
- dependency>
-
- <dependency>
- <groupId>org.springframework.cloudgroupId>
- <artifactId>spring-cloud-starter-gatewayartifactId>
- <version>${spring-cloud-gateway-version}version>
- dependency>
-
- <dependency>
- <groupId>com.alibaba.cspgroupId>
- <artifactId>sentinel-coreartifactId>
- <version>${ali-csp-version}version>
- dependency>
- <dependency>
- <groupId>com.alibaba.cspgroupId>
- <artifactId>sentinel-transport-simple-httpartifactId>
- <version>${ali-csp-version}version>
- dependency>
- dependencies>
- dependencyManagement>
-
- <build>
- <plugins>
- <plugin>
- <groupId>org.springframework.bootgroupId>
- <artifactId>spring-boot-maven-pluginartifactId>
- <configuration>
- <skip>trueskip>
- configuration>
- <executions>
- <execution>
- <goals>
- <goal>repackagegoal>
- goals>
- execution>
- executions>
- plugin>
- plugins>
- build>
- project>
3.创建网关项目,springcloud-gateway
pom.xml
- <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0modelVersion>
- <parent>
- <groupId>com.xiaogroupId>
- <artifactId>springcloud-001artifactId>
- <version>1.0version>
- <relativePath>../pom.xmlrelativePath>
- parent>
- <groupId>com.xiaogroupId>
- <artifactId>springcloud-gatewayartifactId>
- <version>1.0version>
-
- <dependencies>
- <dependency>
- <groupId>org.springframework.cloudgroupId>
- <artifactId>spring-cloud-starter-gatewayartifactId>
- dependency>
- dependencies>
- project>
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/*
4.创建提供项目,springcloud-provider
pom.xml
- <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0modelVersion>
- <parent>
- <groupId>com.xiaogroupId>
- <artifactId>springcloud-001artifactId>
- <version>1.0version>
- <relativePath>../pom.xmlrelativePath>
- parent>
- <groupId>com.xiaogroupId>
- <artifactId>springcloud-providerartifactId>
- <version>1.0version>
-
- <dependencies>
- <dependency>
- <groupId>org.springframework.bootgroupId>
- <artifactId>spring-boot-starter-webartifactId>
- dependency>
- dependencies>
- project>
application.yml
- server:
- port: 9002
- spring:
- application:
- name: springcloud-provider
- cloud:
- nacos:
- discovery:
- server-addr: 192.168.64.19:8848
MusicController.java
- package com.xiao.provider.controller;
-
- import lombok.extern.slf4j.Slf4j;
- import org.springframework.web.bind.annotation.RequestMapping;
- import org.springframework.web.bind.annotation.RequestParam;
- import org.springframework.web.bind.annotation.RestController;
-
- @RestController
- @Slf4j
- public class MusicController {
-
- @RequestMapping("/provider/musicplay")
- public String musicPlay(@RequestParam String musicPath){
- log.info("播放音乐文件[{}]", musicPath);
- return musicPath;
- }
- }
5.创建api工程,springcloud-api
pom.xml
- <project xmlns="http://maven.apache.org/POM/4.0.0"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <parent>
- <artifactId>springcloud-001artifactId>
- <groupId>com.xiaogroupId>
- <version>1.0version>
- parent>
- <modelVersion>4.0.0modelVersion>
-
- <groupId>com.xiaogroupId>
- <artifactId>springcloud-apiartifactId>
-
- <dependencies>
- <dependency>
- <groupId>org.springframework.cloudgroupId>
- <artifactId>spring-cloud-starter-openfeignartifactId>
- dependency>
- dependencies>
-
- project>
MusicClientFallbackFactory.java
- package com.xiao.api.feign.factory;
-
- import com.xiao.api.feign.MusicServiceClient;
- import feign.hystrix.FallbackFactory;
- import lombok.extern.slf4j.Slf4j;
- import org.springframework.stereotype.Component;
-
- /**
- * 音乐服务降级处理
- *
- * @author xiaoss
- * @since 1.0, 2022年07月27日 14:05:40
- */
- @Slf4j
- @Component
- public class MusicClientFallbackFactory implements FallbackFactory<MusicServiceClient> {
-
- @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;
-
- /**
- * 音乐服务接口客户端
- *
- * @author xiaoss
- * @since 1.0, 2022年07月27日 14:08:01
- */
- @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
- <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0modelVersion>
- <parent>
- <groupId>com.xiaogroupId>
- <artifactId>springcloud-001artifactId>
- <version>1.0version>
- <relativePath>../pom.xmlrelativePath>
- parent>
- <groupId>com.xiaogroupId>
- <artifactId>springcloud-consumerartifactId>
- <version>1.0version>
-
- <dependencies>
-
- <dependency>
- <groupId>org.springframework.bootgroupId>
- <artifactId>spring-boot-starter-webartifactId>
- dependency>
- <dependency>
- <groupId>com.alibaba.cloudgroupId>
- <artifactId>spring-cloud-starter-alibaba-sentinelartifactId>
- dependency>
- <dependency>
- <groupId>com.alibaba.cspgroupId>
- <artifactId>sentinel-coreartifactId>
- dependency>
- <dependency>
- <groupId>com.alibaba.cspgroupId>
- <artifactId>sentinel-transport-simple-httpartifactId>
- dependency>
- <dependency>
- <groupId>com.alibaba.cspgroupId>
- <artifactId>sentinel-web-servletartifactId>
- dependency>
- <dependency>
- <groupId>com.xiaogroupId>
- <artifactId>springcloud-apiartifactId>
- <version>1.0version>
- <scope>compilescope>
- dependency>
-
-
-
- dependencies>
- project>
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