zoukankan      html  css  js  c++  java
  • springcloud案例

    一、父工程

      1、项目结构

       2、pom.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <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.0</modelVersion>
        <groupId>com.wuxi</groupId>
        <artifactId>scloud</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <packaging>pom</packaging>
    
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.3.4.RELEASE</version>
        </parent>
    
        <modules>
            <module>EurekaServer</module>
            <module>EurekaClient</module>
            <module>EurekaClientA</module>
            <module>EurekaClientB</module>
            <module>EurekaConfig</module>
        </modules>
    
        <dependencyManagement>
            <dependencies>
                <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-dependencies -->
                <dependency>
                    <groupId>org.springframework.cloud</groupId>
                    <artifactId>spring-cloud-dependencies</artifactId>
                    <version>Hoxton.RELEASE</version>
                    <type>pom</type>
                    <scope>runtime</scope>
                </dependency>
                <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-netflix-eureka-server -->
                <dependency>
                    <groupId>org.springframework.cloud</groupId>
                    <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
                    <version>2.2.5.RELEASE</version>
                </dependency>
                <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-netflix-eureka-client -->
                <dependency>
                    <groupId>org.springframework.cloud</groupId>
                    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
                    <version>2.2.5.RELEASE</version>
                </dependency>
                <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-openfeign -->
                <dependency>
                    <groupId>org.springframework.cloud</groupId>
                    <artifactId>spring-cloud-starter-openfeign</artifactId>
                    <version>2.2.5.RELEASE</version>
                </dependency>
                <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-netflix-zuul -->
                <dependency>
                    <groupId>org.springframework.cloud</groupId>
                    <artifactId>spring-cloud-starter-netflix-zuul</artifactId>
                    <version>2.2.5.RELEASE</version>
                </dependency>
                <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-config-server -->
                <dependency>
                    <groupId>org.springframework.cloud</groupId>
                    <artifactId>spring-cloud-config-server</artifactId>
                    <version>2.2.5.RELEASE</version>
                </dependency>
                <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-config -->
                <dependency>
                    <groupId>org.springframework.cloud</groupId>
                    <artifactId>spring-cloud-starter-config</artifactId>
                    <version>2.2.5.RELEASE</version>
                </dependency>
                <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-bus -->
                <dependency>
                    <groupId>org.springframework.cloud</groupId>
                    <artifactId>spring-cloud-bus</artifactId>
                    <version>2.2.3.RELEASE</version>
                </dependency>
                <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-stream-binder-rabbit -->
                <dependency>
                    <groupId>org.springframework.cloud</groupId>
                    <artifactId>spring-cloud-stream-binder-rabbit</artifactId>
                    <version>3.0.8.RELEASE</version>
                </dependency>
            </dependencies>
        </dependencyManagement>
    
        <dependencies>
            <dependency>
                <groupId>com.wuxi</groupId>
                <artifactId>PublicClass</artifactId>
                <version>0.0.1-SNAPSHOT</version>
            </dependency>
        </dependencies>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <configuration>
                        <source>1.9</source>
                        <target>1.9</target>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    </project>

    二、PublicClass

      1、项目结构

      2、pom.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <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.0</modelVersion>
        <groupId>com.wuxi</groupId>
        <artifactId>PublicClass</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <configuration>
                        <source>1.9</source>
                        <target>1.9</target>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    </project>

      3、Msg.class

    package com.wuxi.vo;
    
    import java.util.HashMap;
    import java.util.Map;
    
    public class Msg {
        //状态吗 200-成功 400-失败
        private int code;
        //提示信息
        private String msg;
        //用户要返回给游览器的数据
        private Map<String, Object> extend = new HashMap<String, Object>();
    
        public static Msg success() {
            Msg result = new Msg();
            result.setCode(200);
            result.setMsg("处理成功!");
            return result;
        }
    
        public static Msg fail() {
            Msg result = new Msg();
            result.setCode(400);
            result.setMsg("处理失败!");
            return result;
        }
    
        //链式操作返回信息
        public Msg add(String key, Object value) {
            this.getExtend().put(key, value);
            return this;
        }
    
    
        public int getCode() {
            return code;
        }
    
        public void setCode(int code) {
            this.code = code;
        }
    
        public String getMsg() {
            return msg;
        }
    
        public void setMsg(String msg) {
            this.msg = msg;
        }
    
        public Map<String, Object> getExtend() {
            return extend;
        }
    
        public void setExtend(Map<String, Object> extend) {
            this.extend = extend;
        }
    }

    三、EurekaServer

      1、项目结构

      2、pom.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <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.0</modelVersion>
        <artifactId>EurekaServer</artifactId>
    
        <parent>
            <artifactId>scloud</artifactId>
            <groupId>com.wuxi</groupId>
            <version>0.0.1-SNAPSHOT</version>
        </parent>
    
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
            </dependency>
        </dependencies>
    </project>

      3、application.yml

    server:
      port: 8081
    spring:
      application:
        name: EurekaServer
    eureka:
      client:
        register-with-eureka: false #Eureka服务本身无需注册
        fetch-registry: false #Eureka服务本身无需获取注册信息
        service-url:
          defaultZone: http://127.0.0.1:${server.port}/eureka/

      4、启动类

    package com.wuxi;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
    
    @SpringBootApplication
    @EnableEurekaServer
    public class MyEurekaServer {
        public static void main(String[] args) {
            SpringApplication.run(MyEurekaServer.class);
        }
    }

    四、EurekaConfig

      1、项目结构

      2、pom.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <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.0</modelVersion>
        <artifactId>EurekaConfig</artifactId>
    
        <parent>
            <artifactId>scloud</artifactId>
            <groupId>com.wuxi</groupId>
            <version>0.0.1-SNAPSHOT</version>
        </parent>
    
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-config-server</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-bus</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-stream-binder-rabbit</artifactId>
            </dependency>
        </dependencies>
    </project>

      3、application.yml

    server:
      port: 8085
    spring:
      application:
        name: EurekaConfig
      cloud:
        config:
          server:
            git:
              uri: https://gitee.com/YiSiYiNian/cloudconfig.git #git仓库地址
      rabbitmq:
        host: 127.0.0.1
    management: #暴露触发消息总线的地址
      endpoints:
        web:
          exposure:
            include: bus-refresh

      4、启动类

    package com.wuxi;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.config.server.EnableConfigServer;
    
    @SpringBootApplication
    @EnableConfigServer
    public class MyApplication {
        public static void main(String[] args) {
            SpringApplication.run(MyApplication.class);
        }
    }

    五、EurekaClient

      1、项目结构

      2、pom.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <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.0</modelVersion>
        <artifactId>EurekaClient</artifactId>
    
        <parent>
            <artifactId>scloud</artifactId>
            <groupId>com.wuxi</groupId>
            <version>0.0.1-SNAPSHOT</version>
        </parent>
    
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-netflix-zuul</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-config</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-bus</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-stream-binder-rabbit</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-actuator</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
        </dependencies>
    </project>

      3、bootstrap.yml

    spring:
      cloud:
        config:
          name: application #文件名-前部分
          profile: zuul #文件名-后部分
          label: master #分支
          uri: http://127.0.0.1:8085 #配置中心地址

      4、启动类

    package com.wuxi;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
    import org.springframework.cloud.netflix.zuul.EnableZuulProxy;
    
    @SpringBootApplication
    @EnableEurekaClient
    @EnableZuulProxy
    public class MyEurekaClient {
        public static void main(String[] args) {
            SpringApplication.run(MyEurekaClient.class);
        }
    }

      5、过滤器

    package com.wuxi.filter;
    
    import com.netflix.zuul.ZuulFilter;
    import com.netflix.zuul.context.RequestContext;
    import com.netflix.zuul.exception.ZuulException;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.cloud.context.config.annotation.RefreshScope;
    import org.springframework.stereotype.Component;
    
    import javax.servlet.http.HttpServletRequest;
    
    @Component
    @RefreshScope
    public class MyEurekaClientFilter extends ZuulFilter {
        /**
         * 在请求前pre或者后post执行
         *
         * @return
         */
        @Override
        public String filterType() {
            return "pre";
        }
    
        /**
         * 多个过滤器的执行顺序,数字越小,表示越先执行
         *
         * @return
         */
        @Override
        public int filterOrder() {
            return 0;
        }
    
        /**
         * 当前过滤器是否开启true表示开启
         *
         * @return
         */
        @Override
        public boolean shouldFilter() {
            return true;
        }
    
        @Value("${person.name}")
        private String personName;
    
        /**
         * 过滤器内执行的操作 return任何object的值都表示继续执行
         * RequestContext.getCurrentContext().setSendZuulResponse(false)表示不再继续执行
         *
         * @return
         * @throws ZuulException
         */
        @Override
        public Object run() throws ZuulException {
            System.out.println("********");
            System.out.println(personName);
            System.out.println("********");
    
            RequestContext requestContext = RequestContext.getCurrentContext();
            HttpServletRequest request = requestContext.getRequest();
            String header = request.getHeader("token");
            if (header != null && !"".equals(header)) {
                //Authorization、Cookie、Set-Cookie不会转发
                requestContext.addZuulRequestHeader("token", header);
            }
            return null;
        }
    }

    六、EurekaClientA

      1、项目结构

      2、pom.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <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.0</modelVersion>
        <artifactId>EurekaClientA</artifactId>
    
        <parent>
            <artifactId>scloud</artifactId>
            <groupId>com.wuxi</groupId>
            <version>0.0.1-SNAPSHOT</version>
        </parent>
    
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
        </dependencies>
    </project>

      3、application.yml

    server:
      port: 8083
    spring:
      application:
        name: EurekaClientA
    eureka:
      client:
        service-url:
          defaultZone: http://127.0.0.1:8081/eureka/
      instance:
        prefer-ip-address: true #跨域

      4、启动类

    package com.wuxi;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
    
    @SpringBootApplication
    @EnableEurekaClient
    public class MyEurekaClientA {
        public static void main(String[] args) {
            SpringApplication.run(MyEurekaClientA.class);
        }
    }

      5、controller

    package com.wuxi.controller;
    
    import com.wuxi.vo.Msg;
    import org.springframework.web.bind.annotation.PathVariable;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    import javax.servlet.http.HttpServletRequest;
    
    @RestController
    @RequestMapping("/a")
    public class AController {
        @RequestMapping(value = "/amethod/{id}")
        public Msg ametohd(@PathVariable("id") Integer id, HttpServletRequest req) {
            System.out.println(req.getHeader("token"));
            return Msg.success().add("id", id);
        }
    }

    七、EurekaClientB

      1、项目结构

      2、pom.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <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.0</modelVersion>
        <artifactId>EurekaClientB</artifactId>
    
        <parent>
            <artifactId>scloud</artifactId>
            <groupId>com.wuxi</groupId>
            <version>0.0.1-SNAPSHOT</version>
        </parent>
    
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-openfeign</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
        </dependencies>
    </project>

      3、application.yml

    server:
      port: 8084
    spring:
      application:
        name: EurekaClientB
    eureka:
      client:
        service-url:
          defaultZone: http://127.0.0.1:8081/eureka/
      instance:
        prefer-ip-address: true #跨域
    feign:
      hystrix:
        enabled: true

      4、启动类

    package com.wuxi;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
    import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
    import org.springframework.cloud.openfeign.EnableFeignClients;
    
    @SpringBootApplication
    @EnableEurekaClient
    @EnableDiscoveryClient
    @EnableFeignClients
    public class MyEurekaClientB {
        public static void main(String[] args) {
            SpringApplication.run(MyEurekaClientB.class);
        }
    }

      5、feign接口

    package com.wuxi.feign;
    
    import com.wuxi.feign.impl.AFeignImpl;
    import com.wuxi.vo.Msg;
    import org.springframework.cloud.openfeign.FeignClient;
    import org.springframework.web.bind.annotation.PathVariable;
    import org.springframework.web.bind.annotation.RequestMapping;
    
    @FeignClient(value = "EurekaClientA", fallback = AFeignImpl.class)
    public interface AFeign {
        @RequestMapping(value = "/a/amethod/{id}")
        Msg ametohd(@PathVariable("id") Integer id);
    }

      6、feign接口实现类

    package com.wuxi.feign.impl;
    
    import com.wuxi.feign.AFeign;
    import com.wuxi.vo.Msg;
    import org.springframework.stereotype.Component;
    
    @Component
    public class AFeignImpl implements AFeign {
        @Override
        public Msg ametohd(Integer id) {
            return Msg.fail().add("branch", "熔断器触发");
        }
    }

      7、controller

    package com.wuxi.controller;
    
    import com.wuxi.feign.AFeign;
    import com.wuxi.vo.Msg;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.PathVariable;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    @RequestMapping("/b")
    public class BController {
        @Autowired
        private AFeign aFeign;
    
        @RequestMapping("/bmethod/{id}")
        public Msg bmethod(@PathVariable("id") Integer id) {
            return aFeign.ametohd(id);
        }
    }
  • 相关阅读:
    ES6 数组下
    ES6 ---数组(上部分)
    ES6---函数
    ES6---字符串
    自适应网页设计(Responsive Web Design)
    HTML Meta中添加X-UA-Compatible和IE=Edge,chrome=1有什么作用?
    mysql潜在的危险kill
    shell脚本加密
    Linux安全知识总结
    nginx 解决400 bad request 的方法(转载)
  • 原文地址:https://www.cnblogs.com/linding/p/13719485.html
Copyright © 2011-2022 走看看