springcloud-微服务项目开发

一、服务端

  1. 添加依赖
    <properties>
        <spring-cloud.version>Hoxton.SR3</spring-cloud.version>
    </properties>
    <!--服务端依赖-->
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </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>
    
  2. application.properties文件配置
    server.port=8761
    
    #实例地址
    eureka.instance.hostname=localhost
    eureka.client.service-url.defaultZone=http://${eureka.instance.hostname}:${server.port}
    #禁止自己作为服务器
    eureka.client.register-with-eureka=false
    #屏蔽注册信息
    eureka.client.fetch-registry=false
    #关闭自我保护
    eureka.server.enable-self-preservation=false
    
    #关闭“没有用于注册服务器的副本节点”的警告信息
    logging.level.com.netflix.eureka=off
    logging.level.com.netflix.discovery=off
    
  3. 启动类加注解@EnableEurekaServer
    @SpringBootApplication
    //springCloud:注册中心的服务端
    @EnableEurekaServer
    public class Springcloud01Application {
    
        public static void main(String[] args) {
            SpringApplication.run(Springcloud01Application.class, args);
        }
    }
    

二、客户端

  1. 添加依赖
    	<properties>
            <spring-cloud.version>Hoxton.SR3</spring-cloud.version>
        </properties>
    
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
                <version>2.2.2.RELEASE</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>
    
  2. application.properties文件配置
    server.port=8085
    
    # redis数据库配置
    spring.redis.database=0
    spring.redis.host=127.0.0.1
    spring.redis.port=6379
    spring.redis.password=
    
    spring.application.name=requestCityData-eureka-feign
    #Eureka客户端配置
    eureka.client.service-url.defaultZone=http://localhost:8761/eureka
    
  3. 启动类加注解@EnableEurekaClient

三、消费者调用提供者提供的数据

  1. 添加依赖
    在消费者项目中加入依赖
    <!--feign   依赖-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-openfeign</artifactId>
            </dependency>
    
  2. application.properties中添加配置
    feign.client.config.feignName.connectTimeout=5000
    feign.client.config.feignName.readTimeout=5000
    
  3. 启动类加注解@EnableFeignClients
  4. 自定义一个接口,不实现类
    添加注解:@FeignClient("cityDataProvider-eureka")cityDataProvider-eureka是提供者的客户端名称,如以下例子:
    方法使用注解@RequestMapping("/city/getCity"),调用提供者的controller层的路径
    @FeignClient("cityDataProvider-eureka")
    public interface GetCityService {
        /**
         * 获取城市信息
         */
        @RequestMapping("/city/getCity")
        public List<CityObj> getCity();
    }
    

四、使用网关
把两个提供者的数据集合到一起

  1. 新建一个spring项目,选择相关依赖:
    在这里插入图片描述
    在这里插入图片描述

  2. 启动类上 加上注解 @EnableZuulProxy@EnableEurekaClient

  3. 配置application.properties文件

    server.port=8087
    
    spring.application.name=eureka-client-zuul
    eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka/
    # 城市 列表 提供者
    zuul.routes.city.path=/zuulCity/**
    zuul.routes.city.serviceId=cityDataProvider-eureka
    # 从redis数据库取数据的 提供者
    zuul.routes.myapi.path=/myApi/**
    zuul.routes.myapi.serviceId=weatherDataProvider-eureka
    
  4. 测试获取数据
    使用配置中的路径获取数据
    例子:http://127.0.0.1:8087/zuulCity/cityData/cities

  5. 修改显示页面的微服务
    新建一个接口,把两个提供者合二为一

    /**
     *  使用 zuul 链接zuul
     */
    @FeignClient(value = "eureka-client-zuul")
    public interface GetCityAndWeather {
    
        /**
         * 获取城市信息
         * @return
         */
        @RequestMapping("/zuulCity/city/getCity")        //路径要和zull的路径一致
        public List<CityObj> getCitiesToZuul();
    
        /**
         * 根据城市id获取天气信息
         * 不是定时存入数据库的
         * @param cityId
         * @return
         */
        @RequestMapping("/myApi/weather/cityId/{cityId}")
        WeatherResponse getWeatherByCityIdToZuul(@PathVariable("cityId")String cityId);
    }
    
    
  6. 修改controller层,然后测试

五、熔断器

  1. 介绍
    在微服务架构中多层服务之间会相互调用,如果其中有一层服务故障了,可能会导致一层服务或者多层服务故障,从而导致整个系统故障。这种现象被称为服务雪崩效应。

    SpringCloud 中的 Hystrix 组件就可以解决此类问题,Hystrix 负责监控服务之间的调用情况,连续多次失败的情况进行熔断保护。

    保护的方法就是使用 Fallback,当调用的服务出现故障时,就可以使用 Fallback 方法的返回值;

    Hystrix 间隔时间会再次检查故障的服务,如果故障服务恢复,将继续使用服务。

  2. 使用熔断器
    导入依赖:

    <dependency>
    	<groupId>org.springframework.cloud</groupId>
    	<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
    </dependency>
    
  3. 启动类加注解:@EnableCircuitBreaker

  4. 配置文件添加:feign.hystrix.enabled=true

  5. 修改 feign 的调用接口
    @FeignClient注解里面添加内容:fallback = GetCityAndWeatherFallBack.class,然后定义一个实现该接口的类GetCityAndWeatherFallBack,在实现类中填充数据数据

    @FeignClient(value = "eureka-client-zuul",fallback = GetCityAndWeatherFallBack.class)
    

    实现接口类:

    public class GetCityAndWeatherFallBack implements GetCityAndWeather {
        @Override
        public List<CityObj> getCitiesToZuul() {
            /**
             * 可以在这里 创建数据
             */
            return null;
        }
    
        @Override
        public WeatherResponse getWeatherByCityIdToZuul(String cityId) {
            return null;
        }
    }
    
  6. 把两个提供者的微服务关闭,测试

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值