Tomcat Nginx环境搭建 qt post timer 虚拟机 layer vue配置 npm安装vue oracle数据库版本 android常用布局 升级python版本 Navicat python传递参数 python返回值 java学习手册 java语言学习 java类与对象 java运行环境配置 java字符串比较 java获取数据类型 乱码查看器 亚索刀光特效包 神龙激活 ps怎么插入表格 ip地址转换器 什么模拟器最好 司司网吧 xapk安装器 电脑待机费电吗 winfax HTA c4dr20 mysql定时备份 mysql嵌套查询 尾行3存档 方正卡通 environment 战地4配置要求 制表符
当前位置: 首页 > 学习教程  > 编程语言

Spring Cloud相关组件的使用简述

2020/11/24 10:01:31 文章标签: 测试文章如有侵权请发送至邮箱809451989@qq.com投诉后文章立即删除

一、注册中心:Eureka,远程调用:Fegin (一)概念简述:Eureka,提供服务注册,各个微服务可以通过注册中心调用其他微服务的功能接口,包含两个组件EurekaServer、EurekaClien…

一、注册中心:Eureka,远程调用:Fegin

(一)概念简述:Eureka,提供服务注册,各个微服务可以通过注册中心调用其他微服务的功能接口,包含两个组件EurekaServer、EurekaClient

简单来说,EurekaServe就是提供注册中心的微服务,比如微服务8001通过配置在7001EurekaServer中进行注册,微服务8002通过EurekaClient进行配置来调用8001的功能模块(以下根据这3个微服务进行解释说明)

(二)Eureka实现步骤

1.新建模块7001,引入依赖eureka依赖(springboot、springcloud依赖版本要对应、其他需要的依赖自行引入)

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>

2.添加yml配置文件

server:
  port: 7001

eureka:
  instance:
    hostname: eureka7001.com
  client:
    register-with-eureka: false
    fetch-registry: false
    service-url:
#      集群模式
#      defaultZone: http://eureka7002.com:7002/eureka
#      单机模式
      defaultZone: http://eureka7001.com:7001/eureka

3.编写启动类

这里需要加上@EnableEurekaServer注解,表示该服务是注册中心,

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

启动服务7001,访问
http://localhost:7001/
如果有画面,说明注册中心配置成功。

4.服务8001注册进7001注册中心

新建微服务8001重复第1步
添加yml文件

server:
  port: 8001
# 设置服务名,调用时需要(必须)
spring:
  application:
    name: cloud-payment-service
    
eureka:
  instance:
    hostname: eureka7001.com
  client:
    register-with-eureka: true
    fetch-registry: true
    service-url:
#      集群模式
#      defaultZone: http://eureka7002.com:7002/eureka
#      单机模式
      defaultZone: http://eureka7001.com:7001/eureka

编写启动类

@SpringBootApplication
@EnableEurekaClient   
//@EnableDiscoveryClient   不是用的eureka注册中心的可以使用这个注解
public class PaymentMain8001 {
    public static void main(String[] args) {
        SpringApplication.run(PaymentMain8001.class,args);
    }
}

访问http://localhost:7001/,注册成功
在这里插入图片描述

(三)Fegin实现步骤(服务9001通过注册中心7001远程调用微服务8001的功能)

1.新建8002

引入openfeign依赖,openfeign服务调用

    <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>

编写yml

server:
  port: 9001

spring:
  application:
    name: cloud-order-openfeign-service

eureka:
  client:
    register-with-eureka: false
    fetchRegistry: true
    service-url:
      defaultZone: http://eureka7001.com:7001/eureka

主启动类

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

2.编写8001controller

@RestController
@Slf4j
public class PaymentController {
    @GetMapping(value = "/testFeign")
    public String testFeign() {

        return "这是8001的testFeign";
    }
}

2.在9001编写中新建包service中放FeignClient的interface 接口

在这里插入图片描述

@Component  //加入容器
@FeignClient(value = "CLOUD-PAYMENT-SERVICE") //yml中的8001注册服务的名称
public interface PaymentFeignService {
	//复制8001中刚刚编写的需要调用的controller
    @GetMapping(value = "/testFeign")
    public String testFeign();
}

3.在9001编写中controller注入接口调用目标方法

@RestController
public class OrderController {
    @Resource
    private PaymentFeignService paymentFeignService;

    @GetMapping(value = "/testFeign")
    public String testFeign(){
        return paymentFeignService.testFeign();
    };
}

3.启动微服务7001,8001,8002

访问http://localhost:9001/testFeign
在这里插入图片描述

调用成功

二、负载均衡:Ribbon

(一)概念简述:Ribbon是Netflix发布的开源项目,主要功能是提供客户端的负载均衡算法和服务调用。Ribbon客户端组件提供一系完善的配置项如连接超时,重试等。简单的说,就是在配置文件中列出Load Balancer(简称LB)后面所有的机器,Ribbon会自动的助你基于某种规则(如简单轮询,随机连接等)去连接这些机器。

(二)轮询实现步骤

1.新建微服务8002重复8001新建步骤:引入依赖、复制8001的yml端口号改为8002、创建主启动类、创建controller

注意这里的return是 “这是8002的testFeign”;

@RestController
@Slf4j
public class PaymentController {
    @GetMapping(value = "/testFeign")
    public String testFeign() {

        return "这是8002的testFeign";
    }
}

2.在9001上加入负载均衡配置类

在这里插入图片描述
这里是轮询的负载均衡
其他基于某种规则的配置或者自定义的负载均衡配置可行添加

@Configuration
public class ApplicationContextConfig {
    @Bean
    @LoadBalanced
    public RestTemplate getRestTemplate(){
        return new RestTemplate();
    }
}

3.启动7001,8001,8002,9001

Eureka中可以看到服务名为CLOUD-PAYMENT-SERVICE有两个
在这里插入图片描述
此时再次访问http://localhost:9001/testFeign
每次刷新就可以进行轮询调用8001,8002了
在这里插入图片描述
在这里插入图片描述

三、断路器:Hystrix

(一)服务降级:如果服务器故障,或者服务器访问时间较长未响应,应该返回一个友好提示,而不是把错误代码返回给用户

1.错误模拟,看看效果

修改8001controller中的testFeign

    @GetMapping(value = "/testFeign")
    public String testFeign() {
        //模拟线程处理时间较长
        try {
       		 //休眠三秒,超过
            TimeUnit.SECONDS.sleep(3);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        return "这是8001的testFeign";
    }

在9001中的yml中设置调用超时时间

ribbon:
  #2秒超时等待
  ReadTimeout: 2000
  ConnecTimeout: 2000

启动,7001,8001,9001
启动访问http://localhost:9001/testFeign

在这里插入图片描述
出现超时错误,返回客户信息,用户体验很差

2.全局的fallback

9001引入hystrix依赖
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
        </dependency>
yml开启hystrix支持
feign:
  hystrix:
    enabled: true
主启动类加入@EnableHystrix注解
@EnableHystrix
@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients
public class OrderFeignMain9001 {
    public static void main(String[] args) {
        SpringApplication.run(OrderFeignMain9001.class,args);
    }
}
在9001的调用的interface中加入PaymentFallbackServiceImpl

在这里插入图片描述

编写PaymentFeignService客户端的实现类,调用失败就是执行这个实现类的方法
@Component
public class PaymentFallbackServiceImpl implements PaymentFeignService {
    @Override
    public String testFeign() {
        return "服务器忙,请稍后再试.....";
    }
}
FeignClient 接口类

@FeignClient 上加入 fallback 的方法类,调用失败时,会执行PaymentFallbackServiceImpl这个类的对应的方法

@Component
@FeignClient(value = "CLOUD-PAYMENT-SERVICE",fallback = PaymentFallbackServiceImpl.class)
public interface PaymentFeignService {
    @GetMapping(value = "/testFeign")
    public String testFeign();
}
重启9001测试

调用就会出现我们上面编写的fallback方法。
在这里插入图片描述


本文链接: http://www.dtmao.cc/news_show_400205.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?