精华内容
下载资源
问答
  • SpringCloud五大组件Config SpringCloudConfig配置中心我们使用Bus来做刷新配置 简介: Spring Cloud Config 是 Spring Cloud 家族中最早的配置中心,虽然后来又发布了 Consul 可以代替配置中心功能,但是 Config ...

    SpringCloud五大组件Config

    SpringCloudConfig配置中心我们使用Bus来做刷新配置

    简介:
    Spring Cloud Config 是 Spring Cloud 家族中最早的配置中心,虽然后来又发布了 Consul 可以代替配置中心功能,但是 Config 依然适用于 Spring Cloud 项目,通过简单的配置即可实现功能。

    一、我们创建一个SpringBoot项目,服务名为:conifg-server,Pom配置如下:

    <?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>
        <parent>
            <groupId>主Pom的GroupId</groupId>
            <artifactId>主Pom的ArtifactId</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </parent>
        <groupId>com.*.*</groupId>
        <artifactId>config-server</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <name>lezhuboot-cloud-config-server</name>
        <description>Demo project for Spring Boot</description>
    
        <properties>
            <java.version>1.8</java.version>
        </properties>
    
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-config-server</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-bus-amqp</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-config-monitor</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-netflix-hystrix-stream</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-stream-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-test</artifactId>
                <scope>test</scope>
            </dependency>
        </dependencies>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </build>
    
    </project>
    
    

    二、ConfigServerApplication类加上注解@EnableConfigServer,开启Config的功能,代码如下:

    @SpringBootApplication
    @EnableDiscoveryClient
    @EnableConfigServer
    public class LeZhuBootCloudConfigServerApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(LeZhuBootCloudConfigServerApplication.class, args);
        }
    }
    

    三、在Gitee上创建一个仓库,然后创建一个文件起名为:bootstrap-member.yml,然后我们在文件中写上:

    test: 
     testName: zhangsan123456
    

    四、在Config服务Yml中添加配置,配置如下:

    eureka:
      instance:
        #开启IP注册
        prefer-ip-address: true
        #地址名称
        instance-id: ${spring.cloud.client.ip-address}:${server.port}
        #心跳
        lease-renewal-interval-in-seconds: 5
        #无心跳,十秒踢出
        lease-expiration-duration-in-seconds: 10
        #获取此实例的相对健康检查URL路径。 健康检查页面URL,然后构造出主机名和通信的类型 - 安全或不安全,如securePort和nonSecurePort规定。 它通常用于制造基于实例的健康做出明智的决策 - 例如,它可以被用来确定是否进行部署到整个服务器场或停止部署,而不会造成进一步的损害。
        health-check-url-path: /actuator/health
      client:
        #表示的频率(以秒为单位)来从eureka服务器注册表的信息
        registryFetchIntervalSeconds: 5
        service-url:
          defaultZone: ${EUREKA_SERVICE_URL:http://127.0.0.1:28001}/eureka/
    server:
      port: 28101
    spring:
      application:
        name: config-server
      rabbitmq:
        host: xxxxx
        password: xxxx
        port: xxxx
        username: xxxx
      cloud:
        config:
          label: master
          server:
            git:
              password: xxxxx
              search-paths: /conifg
              uri: https://gitee.com/xxxx/configuration_file.git
              username: xxxxxx
              force-pull: true #设置强行pull拉取
    #关闭安全认证
    management:
      security:
        enabled: false
        #refresh接入点显式暴露出来
      endpoints:  # 暴露bus 接口 ,否则 更新 refresh 没用的
        web:
          exposure:    # expose: "*" 已过期
            include: "*"
      endpoint:
        bus-refresh:
          enabled: true
        health:
          #当显示完整的健康细节。
          show-details: ALWAYS
    
    
    

    五、改造以前的Member项目,Pom配置添加如下:

            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-config</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-bus-amqp</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-actuator</artifactId>
            </dependency>
    

    六、在Member服务Yml中添加,配置如下:

    server:
      port: 28667
    eureka:
      instance:
        prefer-ip-address: true
        instance-id: ${spring.cloud.client.ip-address}:${server.port}
        lease-renewal-interval-in-seconds: 5
        lease-expiration-duration-in-seconds: 10
        health-check-url-path: /actuator/health
      client:
        registryFetchIntervalSeconds: 5
        service-url:
          defaultZone: ${EUREKA_SERVICE_URL:http://127.0.0.1:28001}/eureka/
    spring:
      application:
        name: member
      rabbitmq:
        host: xxxxxx
        password: xxxxx
        port: xxxxx
        username: xxxx
      cloud:
        config:
          name: bootstrap-member               #对应{application}部分
          profile: master                      #对应{profile}部分
          uri: xxxxx   #配置中心的具体地址
          label: master                        #对应git的分支。如果配置中心使用的是本地存储,则该参数无用
          discovery:
            service-id: config-server    #指定配置中心的service-id,便于扩展为高可用配置集群。
            enabled: true                      #开启Config服务发现支持
          fail-fast: true
          #配置重试机制
          retry:
            initial-interval: 2000
            max-attempts: 2000
            max-interval: 2000
            multiplier: 1.2
        bus:
          #动态刷新配置
          refresh:
            enabled: true
          #跟踪总线事件
          trace:
            enabled: true
          bus:
            id: ${spring.application.name}:${spring.cloud.config.profile}:${random.value}
    
    # 暴露监控点
    management:
      endpoints:
        web:
          exposure:
            include: "*"
    

    七、我们在Member服务中改造控制器,代码如下:

    @RestController
    @RequestMapping("/member")
    @RefreshScope
    public class MemberController {
    
        @Value("${test.testName}")
        private String testName;
    
        @GetMapping("/sayHiMember")
        public String sayHiMember(String name) {
            return "SayHi会员:" + name + ":" + ":从Git上取文件配置:" + testName;
        }
    }
    

    八、我们自己安装一个Rabbitmq,如何安装就不在演示,请自行查询。

    九、我们启动服务,顺序是先启动注册中心,在启动config,再去启动zuul、user和member服务

    十、启动完成,我们通过网关去访问User服务并且内部永Feign调用member服务,member服务里面从gitee上取配置文件,在网页中输入:http://127.0.0.1:28580/user/user/userInfo?name=zhangsan,演示结果如下:

    圈红框的地方,就是从gitee上取的配置结果
    在这里插入图片描述
    十一、我们去Gitee上去修改配置文件,修改图如下:

    把zhangsan123456改成zhangsan

    在这里插入图片描述
    十二、我们用Post请求去调用http://localhost:28101/actuator/bus-refresh,进行配置文件刷新,刷新完成后重新调用http://127.0.0.1:28580/user/user/userInfo?name=zhangsan,结果如下:
    在这里插入图片描述

    SpringCloud五大组件Config配置中心告一段落,后续讲解如何不去调用/actuator/bus-refresh接口去实现Git自动推送刷新配置

    展开全文
  • SpringCloud五大组件Zuul

    2020-07-28 15:10:27
    SpringCloud五大组件Zuul 介绍: Zuul是Netflix开源的微服务网关,可以和Eureka、Ribbon、Hystrix等组件配合使用,Spring Cloud对Zuul进行了整合与增强,Zuul默认使用的HTTP客户端是Apache HTTPClient,也可以使用...

    SpringCloud五大组件Zuul

    介绍:
    Zuul是Netflix开源的微服务网关,可以和Eureka、Ribbon、Hystrix等组件配合使用,Spring Cloud对Zuul进行了整合与增强,Zuul默认使用的HTTP客户端是Apache HTTPClient,也可以使用RestClient或okhttp3.OkHttpClient。 Zuul的主要功能是路由转发和过滤器。路由功能是微服务的一部分,比如/user/info转发到到user服务。zuul默认和Ribbon结合实现了负载均衡的功能

    第一步、我们先创建一个SpringBoot项目起名为:zuul,Pom配置如下:

    <?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>
        <packaging>pom</packaging>
        <parent>
            <groupId>主Pom的GroupId</groupId>
            <artifactId>主Pom的ArtifactId</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </parent>
        <groupId>com.*.*</groupId>
        <artifactId>zuul</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <name>zuul</name>
        <description>project for Spring Boot</description>
        <properties>
            <java.version>1.8</java.version>
        </properties>
    
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-netflix-zuul</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-netflix-hystrix</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-test</artifactId>
                <scope>test</scope>
            </dependency>
        </dependencies>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                    <configuration>
                        <mainClass>com.lezhu.cloud.LeZhuBootCloudZuulApplication</mainClass>
                    </configuration>
                    <executions>
                        <execution>
                            <goals>
                                <goal>repackage</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
    </project>
    
    

    二、ZuulApplication类加上注解@EnableZuulProxy,开启zuul的功能,代码如下:

    @EnableZuulProxy
    @EnableDiscoveryClient
    @SpringBootApplication
    public class ZuulApplication {
        public static void main(String[] args) {
            SpringApplication.run(ZuulApplication.class, args);
        }
    }
    

    三、application.yml配置如下:

    spring:
      application:
        name: zuul-server
    server:
      port: 28580
    
    eureka:
      instance:
        #开启IP注册
        prefer-ip-address: true
        #地址名称
        instance-id: ${spring.cloud.client.ip-address}:${server.port}
        #心跳
        lease-renewal-interval-in-seconds: 5
        #无心跳,十秒踢出
        lease-expiration-duration-in-seconds: 10
        #获取此实例的相对健康检查URL路径。 健康检查页面URL,然后构造出主机名和通信的类型 - 安全或不安全,如securePort和nonSecurePort规定。 它通常用于制造基于实例的健康做出明智的决策 - 例如,它可以被用来确定是否进行部署到整个服务器场或停止部署,而不会造成进一步的损害。
        health-check-url-path: /actuator/health
      client:
        #表示的频率(以秒为单位)来从eureka服务器注册表的信息
        registryFetchIntervalSeconds: 5
        service-url:
          defaultZone: ${EUREKA_SERVICE_URL:http://localhost:28001}/eureka/
    zuul:
      routes:
        user:
          path: /user/**
          serviceId: user
        max:
          host:
            connections: 5000
            socket-timeout-millis: 60000
            connect-timeout-millis: 60000
      #未传递到下游请求敏感头的列表。 默认为“安全”组通常含有用户凭据头。 这是确定的,以消除那些从列表中,如果下游的服务是一样的系统作为代理的一部分,所以它们共享认证数据。
      sensitive-headers:
      #标志以确定是否代理转发的主机头。
      add-host-header: true
    
    ###SpringCloud feign 默认开启支持ribbon
    ribbon:
       MaxAutoRetries: 1 #最大重试次数,当Eureka中可以找到服务,但是服务连不上时将会重试
       MaxAutoRetriesNextServer: 1 #切换实例的重试次数
       OkToRetryOnAllOperations: false # 对所有的操作请求都进行重试,如果是get则可以,如果是post,put等操作没有实现幂等的情况下是很危险的,所以设置为false
       ConnectTimeout: 10000 #请求连接的超时时间
       ReadTimeout: 10000 #请求处理的超时时间
    
    ### Hystrix 配置
    ##注意:建议 Ribbon 的超时时间不要大于 Hystrix 的超时时间
    hystrix:
      # 这样将会自动配置一个 Hystrix 并发策略插件的 hook,这个 hook 会将 SecurityContext 从主线程传输到 Hystrix 的命令。
      # 因为 Hystrix 不允许注册多个 Hystrix 策略,所以可以声明 HystrixConcurrencyStrategy
      # 为一个 Spring bean 来实现扩展。Spring Cloud 会在 Spring 的上下文中查找你的实现,并将其包装在自己的插件中。
      shareSecurityContext: true
      command:
        default:
          circuitBreaker:
            # 当在配置时间窗口内达到此数量的失败后,进行短路。默认20个
            requestVolumeThreshold: 1
            # 触发短路的时间值,当该值设为5000时,则当触发 circuit break 后的5000毫秒内都会拒绝request
            # 也就是5000毫秒后才会关闭circuit。默认5000
            sleepWindowInMilliseconds: 15000
            # 强制打开熔断器,如果打开这个开关,那么拒绝所有request,默认false
            forceOpen: false
            # 强制关闭熔断器 如果这个开关打开,circuit将一直关闭且忽略,默认false
            forceClosed: false
          execution:
            isolation:
              thread:
                # 熔断器超时时间,默认:1000/毫秒
                timeoutInMilliseconds: 50000
              #要使用hystrix的超时fallback,必须设置:
            timeout:
              enabled: true
    ###设置feign客户端超时时间
    feign:
      client:
        config:
          default:
            #建立连接所用的时间,适用于网络状况正常的情况下,两端连接所需要的时间
            ConnectTimeOut: 5000
            #指建立连接后从服务端读取到可用资源所用的时间
            ReadTimeOut: 10000
    
    

    四、网页输入:http://127.0.0.1:28580/user/user/userInfo?name=张三
    在这里插入图片描述
    五、番外篇,服务过滤
    zuul不仅只是路由,并且还能过滤,做一些安全验证。

    @Log4j2
    @Component
    public class PreSendForwardFilter extends ZuulFilter {
        @Override
        public String filterType() {
            // 在路由之前进行过滤
            return FilterConstants.PRE_TYPE;
        }
    
        @Override
        public int filterOrder() {
            return FilterConstants.FORM_BODY_WRAPPER_FILTER_ORDER - 1;
        }
    
        /**
         * 核心过滤器
         *
         * @return boolean
         */
        @Override
        public boolean shouldFilter() {
            // 获取请求上下文
            RequestContext context = RequestContext.getCurrentContext();
            // 获取到request
            HttpServletRequest request = context.getRequest();
    
            String user = request.getParameter("user");
            String uri = request.getRequestURI();
    
            // 若请求中包含/abc8080路径,且没有user请求参数,则无法通过过滤
    //        if(uri.contains("/abc8080") && StringUtils.isEmpty(user)) {
    //            log.warn("user用户为空");
    //            // 指定当前请求未通过zuul过滤,默认值为true
    //            context.setSendZuulResponse(false);
    //            context.setResponseStatusCode(HttpStatus.SC_UNAUTHORIZED);
    //            return false;
    //        }
            return true;
        }
    
        /**
         * 过滤通过后要执行的方法
         *
         * @return Object
         * @throws ZuulException
         */
        @Override
        public Object run() throws ZuulException {
            RequestContext requestContext = RequestContext.getCurrentContext();
            HttpServletRequest request = requestContext.getRequest();
            String host = request.getRemoteHost();
            String method = request.getMethod();
            String uri = request.getRequestURI();
            log.info("请求URI:{},HTTP Method:{},请求IP:{}", uri, method, host);
            return null;
        }
    }
    

    SpringCloud五大组件Zuul网关API已到此结束

    展开全文
  • springcloud是微服务架构的集大成者,将一系列优秀的组件进行了整合。基于springboot构建。 springcloud的版本说明: springcloud项目是由多个独立项目集合而成的,每个...SpringCloud 5常用组件 服务发现—...

    springcloud是微服务架构的集大成者,将一系列优秀的组件进行了整合。基于springboot构建。

    springcloud的版本说明:

    springcloud项目是由多个独立项目集合而成的,每个项目都是独立的,各自进行自己的迭代和版本发布。所以springcloud不方便使用版本号来管理,而是使用版本名。以避免和子项目版本号的冲突。

    SpringCloud 5大常用组件

    1. 服务发现——Netflix Eureka:
    2. 客服端负载均衡——Netflix Ribbon:服务间发起请求时,基于Ribbon做负载均衡,从一个服务的多台机器中选择一台
    3. 断路器——Netflix Hystrix:服务间的请求走不同的Hystrix线程池,避免了服务雪崩
    4. 服务网关——Netflix Zuul:提供统一的请求入口,Zuul会将这些请求转发给相对应的服务
    5. 分布式配置——Spring Cloud Config;

    Eureka

    作用:实现服务治理(服务注册与发现)

    简介:Spring Cloud Eureka是Spring Cloud Netflix项目下的服务治理模块。

    由两个组件组成:Eureka服务端和Eureka客户端。

    Eureka服务端用作服务注册中心。支持集群部署。

    Eureka客户端是一个java客户端,用来处理服务注册与发现。

    在应用启动时,Eureka客户端向服务端注册自己的服务信息,同时将服务端的服务信息缓存到本地。客户端会和服务端周期性的进行心跳交互,以更新服务租约和服务信息。

    Eureka中每台机器都是peer-to-peer的,集群中的机器地位平等,各个服务可以向任何一个Eureka实例注册和发现。集群中的任何一个Eureka接收到写请求后,会自动同步给所有的Eureka实例。与Dubbo使用的一致性同步机制CP不同,Eureka使用的是AP。使用默认的配置服务上下线服务感知的时效性是非常糟糕的,可能需要几十秒,甚至是分钟级别的。

     

    Ribbon

    作用:Ribbon,主要提供客户侧的软件负载均衡算法。

    简介:Spring Cloud Ribbon是一个基于HTTP和TCP的客户端负载均衡工具,它基于Netflix Ribbon实现。通过Spring Cloud的封装,可以让我们轻松地将面向服务的REST模版请求自动转换成客户端负载均衡的服务调用。

    注意看上图,关键点就是将外界的rest调用,根据负载均衡策略转换为微服务调用。Ribbon有比较多的负载均衡策略,以后专门讲解。

    Hystrix

    作用:断路器,保护系统,控制故障范围。

    简介:为了保证其高可用,单个服务通常会集群部署。由于网络原因或者自身的原因,服务并不能保证100%可用,如果单个服务出现问题,调用这个服务就会出现线程阻塞,此时若有大量的请求涌入,Servlet容器的线程资源会被消耗完毕,导致服务瘫痪。服务与服务之间的依赖性,故障会传播,会对整个微服务系统造成灾难性的严重后果,这就是服务故障的“雪崩”效应。

    什么情况下会熔断什么是服务熔断?什么是服务降级?

    熔断机制:应对雪崩效应的一种微服务链路保护机制。当查出链路中的某个微服务不可用或者响应时间太长时,会进行服务降级,进而熔断该节点微服务的调用,快速返回“错误”的响应信息。当检测到该节点微服务调用响应正常时则恢复调用链路。在SpringCloud 框架里熔断机制通过 Hystrix 实现,Hystrix 会监控微服务间调用的状况,当失败的调用到一定阈值,缺省是5秒内调用20次,如果失败,就会启动熔断机制。熔断机制的注解是 @HystrixCommand

    服务降级:一般是从整体负荷考虑。就是当某个服务熔断之后,服务器将不再被调用,此时客户端可以自己准备一个本地的fallback 回调,返回一个缺省值。这样做,虽然水平下降,但好歹可用,比直接挂掉强。

    Zuul

    作用:api网关,路由,负载均衡等多种作用

    简介:类似nginx,反向代理的功能,不过netflix自己增加了一些配合其他组件的特性。

    在微服务架构中,后端服务往往不直接开放给调用端,而是通过一个API网关根据请求的url,路由到相应的服务。当添加API网关后,在第三方调用端和服务提供方之间就创建了一面墙,这面墙直接与调用方通信进行权限控制,后将请求均衡分发给后台服务端。

    Config

    作用:配置管理

    简介:SpringCloud Config提供服务器端和客户端。服务器存储后端的默认实现使用git,因此它轻松支持标签版本的配置环境,以及可以访问用于管理内容的各种工具。

    这个还是静态的,得配合Spring Cloud Bus实现动态的配置更新。

    展开全文
  • SpringCloud 之熔断监控 Hystrix Dashboard SpringCloud 之监控数据聚合 Turbine 配置中心 SpringCloud 之配置中心 Config(Git 版) SpringCloud 之配置中心 Config(高可用) SpringCloud 之配置中心 ...
  • SpringCloud五大组件之一Eureka 首先我们先创建一个Maven主项目,引入SpringBoot 2.1.15.RELEASE 并且使用SpringCloud版本为Greenwich.SR6(亲测SpringBoot2.1.15和SpringCloud版本Greenwich.SR6可以完美融合一起)...

    SpringCloud五大组件之一Eureka

    首先我们先创建一个Maven主项目,引入SpringBoot 2.1.15.RELEASE 并且使用SpringCloud版本为Greenwich.SR6(亲测SpringBoot2.1.15和SpringCloud版本Greenwich.SR6可以完美融合一起)。这个pom文件作为父pom文件,起到依赖版本控制的作用,其他module工程继承该pom。父pom代码如下

    <?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>
        <packaging>pom</packaging>
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.1.15.RELEASE</version>
            <relativePath/> <!-- lookup parent from repository -->
        </parent>
        <groupId>创建Maven主项目的时候自定义</groupId>
        <artifactId>创建Maven主项目的时候自定义</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <name>创建Maven主项目的时候自定义</name>
        <description> project for Spring Boot</description>
    
        <properties>
            <java.version>1.8</java.version>
            <spring-cloud.version>Greenwich.SR6</spring-cloud.version>
            <lombok.version>1.16.20</lombok.version>
            <spring-boot-admin.version>1.5.4</spring-boot-admin.version>
            <mysql.version>5.1.39</mysql.version>
        </properties>
    
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
            <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>${mysql.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-lang3</artifactId>
            </dependency>
            <!--Lombok-->
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>${lombok.version}</version>
            </dependency>
        </dependencies>
    
    
        <dependencyManagement>
            <dependencies>
                <dependency>
                    <groupId>org.springframework.cloud</groupId>
                    <artifactId>spring-cloud-dependencies</artifactId>
                    <version>${spring-cloud.version}</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
            </dependencies>
        </dependencyManagement>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </build>
    
    </project>
    
    

    第二步、我们创建一个Model,SpringBoot项目
    在这里插入图片描述

    第三步、写上包路径和项目名称(根据个人需求改写)
    在这里插入图片描述
    第四步、我们选择Eureka服务端并且选择SpringBoot2.1.15
    在这里插入图片描述

    完后的工程,其pom.xml继承了父pom文件,并引入spring-cloud-starter-netflix-eureka-server的依赖,代码如下

    <?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>
        <packaging>pom</packaging>
        <modules>
            <module>eureka-server</module>
        </modules>
        <parent>
            <groupId>父POM groupId路径</groupId>
            <artifactId>父POM artifactId</artifactId>
            <version>父POM version</version>
        </parent>
        <artifactId>创建时自定义</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <name>创建时自定义</name>
        <description>project for Spring Boot</description>
    
        <properties>
            <java.version>1.8</java.version>
        </properties>
    
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
        </dependencies>
    
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </build>
    
    </project>
    
    

    第六步、我们在Eureka项目上右击在创建一个Model项目,选择Maven(做Maven聚合项目,可做可不做看个人,不做可以跳过)
    闲扯一下,简单介绍Maven聚合项目的优缺点

    优点:
    方便管理
    开发过程更加快速
    纵向切分,使项目结构更加清楚:将一个项目的多个功能模块分开;
    然后再对每个模块进行横向切分:就是我们平常说的三层架构,将项目分成了web层(也被叫做表现层),service层(也被叫做业务层)、dao层(也被叫做持久层),可以理解为将一个功能模块的不同调用过程进行了水平方向的拆分。
    项目整合:横向拆分后,每个功能模块进行了单独的开发,项目整合的时候只需要有一个能够整合这些项目或者模块的工程即可
    缺点:
    maven本身就是一个庞大的构建系统,学习难度大,再加上聚合相互集成依赖,更加饶人
    maven采用约定优于配置的策略(convention over configuration),虽然上手容易,但是聚合一旦出了问题,难于调试。
    聚合当依赖很多时,m2eclipse 老是搞得Eclipse很卡(Maven聚合项目依赖多,模块多的情况下也很卡)。
    中国的网络环境差,很多repository无法访问,比如google code, jboss 仓库无法访问等。

    在这里插入图片描述
    选择完Maven点击Next下一步
    在这里插入图片描述
    填写完项目名,选择Parent(那个项目下),点击Finish完成后项目结构如下
    在这里插入图片描述

    因项目名称打马赛克怕各位同学看不太清楚项目结构,下面列出搭建结构和项目结构希望能理清思路
    
    搭建结构:
    ---------父Pom(公共依赖包管理和版本管理)
    	-------项目主Pom(项目主Pom只引用自己模块下需要的东西)
    		------项目子Pom(只需要依赖项目主Pom)
    项目结构
    -----SpringCloud
    	-----SpringCloud-Eureka
    		-----SpringCloud-Eureka-Server
    

    第七步、启动一个服务注册中心,只需要一个注解@EnableEurekaServer,这个注解需要在Springboot工程的启动类上加:

    
    @SpringBootApplication
    @EnableEurekaServer
    public class EurekaServerApplication {
    
        public static void main(String[] args) {
            SpringApplication.run( EurekaServerApplication.class, args );
        }
    }
    

    第八步、配置appication.yml
    通过eureka.client.registerWithEureka:false和fetchRegistry:false来表明自己是一个eureka server.

    server:
      #服务端口号
      port: 28001
      servlet:
        #应用程序的显示名称
        application-display-name: eureka-server
    spring:
      application:
        #服务名称
        name: eureka-server
    eureka:
      instance:
        prefer-ip-address: true
        hostname: 127.0.0.1
      client:
        fetch-registry: false
        register-with-eureka: false
        service-url:
          defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
    

    第九步、打开网页输入127.0.0.1:28001,就可以看到如下界面,看到如下界面就证明你搭建的注册中心成功了
    在这里插入图片描述

    SpringCloud五大组件之一Eureka服务端已到此结束

    展开全文
  • 首先本机先要安装以下环境,建议先学习了解springboot和springcloud基础知识。 git java8 maven 开发环境搭建 linux和mac下可在项目根目录下执行 ./install.sh 快速搭建开发环境。如要了解具体的步骤,请看如下...
  • 一、spring cloud ...二、五大常用组件 服务发现——Netflix Eureka 客服端负载均衡——Netflix Ribbon 断路器——Netflix Hystrix 服务网关——Netflix Zuul 分布式配置——Spring Cloud Config ...
  • SpringCloud五大组件

    2021-03-26 18:16:16
    Eureka包含两个组件:Eureka Server和Eureka Client. Eureka Server提供服务注册服务:各个微服务节点通过配置后,会在Eureka Server中进行注册,这样Eureka Server中的服务注册表中将会存储所有可用服务节点的信息...
  • 什么是Feign? Feign是一个声明式的Web服务客户端,使得编写Web服务客户端变得非常容易, 只需要创建一个接口,然后在上面添加...Spring Cloud对Feign进行了封装,使其支持了Spring MVC标准注解和HttpMessageConvert..
  • 前面几篇文章主要是单个介绍某些组件Springcloud中的使用,下面我们来使用feign与Hystrix组合的方式来完成微服务之间的调用以及服务出现问题时的熔断降级! 1)eureka服务注解 @SpringBootApplication @...
  • SpringCloud五大组件详细分析以及配置

    千次阅读 2019-12-24 16:31:47
    SpringClound五大组件详细分析以及配置欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定...
  • springcloud是微服务架构的集大成者,将一系列优秀的组件进行了整合。 springcloud的版本说明: springcloud项目是由多个独立项目集合而成的,每个项目都是独立的,各自进行自己的迭代和版本发布。所以springcloud...
  • springCloud五大核心组件介绍

    千次阅读 多人点赞 2020-03-19 10:13:57
    一:首先看一张springCloud的图片: 二:简单介绍下什么是springCloud? "Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智能路由,微代理,控制总线)。...
  • 1、什么是微服务? 把某一功能独立出来单独作为一个进程类似的微小的服务。独立做某件事,与其他的服务...微服务能够使用不同的语言开发 易于与第三方集成,微服务允许容易且灵活的方式集成自动部署,通过集成工具...
  • 前言Spring Boot 的优势是不言而喻的,它... 此外 SpringBoot 集成了 Tomcat ,使项目部署变得容易,不需要单独部署 Tomcat ,使用 Java 命令即可完成项目的发布。然而 Spring Boot 不是分布式架构,随着我公司项目...
  • 在前面的学习中,我们使用了Ribbon的负载均衡功能,大大简化了远程调用时的代码: String user = this.restTemplate.getForObject("http://service-provider/user/" + id, String.class); 如果就学到这里,你可能...
  • 这是一个简单的SpringCloud整合五大组件注册中心Eureka、负载均衡Ribbon、熔断器Hystrix、伪装Feign、服务网关Zuu,旨在认识这五大组件,以及这五大组件该如何使用
  • 首先看一张springCloud的图片: 二、简单介绍下什么是springCloud “Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智能路由,微代理,控制总线)。分布式...
  • 不过大多数讲解还停留在对Spring Cloud功能使用的层面,其底层的很多原理,很多人可能并不知晓。因此本文将通过大量的手绘图,给大家谈谈Spring Cloud微服务架构的底层原理。 实际上,Spring Cloud是一个全家桶式的...
  • 知道什么是SpringCloud 独立搭建Eureka注册中心 独立配置Robbin负载均衡 1.系统架构演变 随着互联网的发展,网站应用的规模不断扩大。需求的激增,带来的是技术上的压力。系统架构也因此也不断的演进、升级、迭代。...
  • Spring Cloud Config:分布式配置 具体详细介绍可以看这俩兄弟的博客,搬砖的活我就不干了. (https://blog.csdn.net/aydxl/article/details/88180342) (https://blog.csdn.net/weixin_40910372/ar
  • 点击关注上方“JAVA开发本营”,设为“置顶或星标”,第一时间送达技术干货。 全文阅读预计10分钟,可分多次阅读JAVA开发本营前言:从现在微服务框架的使用来看,毫无疑问,Sprin...
  • 概述 微服务的概念源于 2014 年 3 月 Martin Fowler 所写的...不过大多数讲解还停留在对Spring Cloud功能使用的层面,其底层的很多原理,很多人可能并不知晓。因此本文将通过大量的手绘图,给大家谈谈Spring Cloud微服
  • 通过前面的学习,使用Spring Cloud实现微服务的架构基本成型,大致是这样的: 前面的文章我们介绍了,Eureka用于服务的注册于发现,Feign支持服务的调用以及均衡负载,Hystrix处理服务的熔断防止故障扩散,似乎一个...
  • springcloud学习之----五大核心组件分享 三年java,一直都是在接触流量...本篇主要是讲一下对springcloud五大核心组件的理解,欢迎指正。 五大核心组件 springcloud所谓的五大核心组件,是指以下五个: Eureka :服...
  • Spring Cloud生态体系内,最核心的五大部件成就了它如今的辉煌: 1、注册中心 在Spring Cloud中,注册中心有多个方案可选:Eureka、Zookeeper、Consul。 目前使用最多的是Eureka,如果熟悉阿里Dubbo框架的话,...

空空如也

空空如也

1 2 3 4 5 ... 12
收藏数 230
精华内容 92
关键字:

springcloud五大组件使用

spring 订阅