springCloudNetFlix

springCloudNetFlix


导入依赖= =》编写配置= =》开启服务

图解及Git

在这里插入图片描述

springCloud五大组件

eureka:注册中心

ribbon: 负载均衡

hystrix:服务熔断及降级及监控

zuul:路由

config:分布式管理

1.springCloud-Api

导入实体类

2.注册中心eureka7001
a.导入依赖
<!--        注册中心-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka-server</artifactId>
            <version>1.4.6.RELEASE</version>
        </dependency>
b.配置
server:
  port: 7001
#Eureka配置
eureka:
  instance:
    hostname: eureka7001.com #Eureka服务端的实例名称
  client:
    register-with-eureka: false # 表示是否向eureka注册中心注册自己
    fetch-registry: false #fetch-registry如果为false,则表示自己为注册中心
    service-url:
      # 单机
#      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
      # 集群(关联):
      defaultZone: http://eureka7002.com:7002/eureka/
c.开启服务
//注册中心! 启动之后访问localhost:7001
@SpringBootApplication
@EnableEurekaServer
public class EurekaServer_7001 {
    public static void main(String[] args) {
        SpringApplication.run(EurekaServer_7001.class,args);
    }
}
3.Ribbon负载均衡80(在消费者处配置)
a.导入依赖:
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-ribbon</artifactId>
            <version>1.4.6.RELEASE</version>
        </dependency>
<!--        这里是配置eureka服务端的依赖-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka</artifactId>
            <version>1.4.6.RELEASE</version>
        </dependency>     
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-config</artifactId>
        </dependency>
        <dependency>
            <groupId>com.xu</groupId>
            <artifactId>springCloud-Api</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
b.编写配置:
server:
  port: 80
eureka:
  client:
    register-with-eureka: false # 不向eureka注册自己
    service-url:
      defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/
c.开启服务:
@SpringBootApplication
@EnableEurekaClient
//注入负载均衡的配置类,实现负载均衡算法,name=服务id configuration=配置类
@RibbonClient(name = "SPRINGCLOUD-PROVIDER-DEPT",configuration = xuRule.class)
public class DeptConsumer_80 {
    public static void main(String[] args) {
        SpringApplication.run(DeptConsumer_80.class,args);
    }
}
d.实现RestTemplate
@Configuration
public class ConfigBean {
    //配置负载均衡实现RestTemplate
    @Bean
    @LoadBalanced //Ribbon  开启负载均衡的注解
    public RestTemplate getRestTemplate(){
        return new RestTemplate();
    }
}
e.controller层注入RestTemplate

原理是通过提供服务者的服务名来访问,restful风格访问

/**
 * 消费部门
 */
@RestController
public class DeptConsumerController {

    @Autowired
    RestTemplate restTemplate;

    //这里的REST_URL_PREFIX设置为服务提供者的id,方便消费者从注册中心调用
    private static final String REST_URL_PREFIX = "http://SPRINGCLOUD-PROVIDER-DEPT";
    @PostMapping("/consumer/add")
    public Boolean add(Dept dept){
        //(REST_URL_PREFIX+"/Dept/add",通过服务者的id拼接请求路径访问
        return restTemplate.postForObject(REST_URL_PREFIX+"/Dept/add",dept,Boolean.class);
    }
    @GetMapping("/consumer/get/{id}")
    public Dept get(@PathVariable("id") Long id){
        return restTemplate.getForObject(REST_URL_PREFIX+"/Dept/get/"+id,Dept.class);
    }
    @GetMapping("/consumer/list")
    public List<Dept> list(){
        return restTemplate.getForObject(REST_URL_PREFIX+"/Dept/list",List.class);
    }
}
f.负载均衡算法

必须在主启动类的上一级配置,不能被springboot扫到;需要手动到主启动类上配置服务id和配置类类名

@Configuration
public class xuRule {
    // IRule
    // RoundRobinRule 轮询
    // RandomRule 随机
    // AvailabilityFilteringRule : 会先过滤掉,跳闸,访问故障的服务~,对剩下的进行轮询~
    // RetryRule : 会先按照轮询获取服务~,如果服务获取失败,则会在指定的时间内进行,重试
    @Bean
    public IRule getRule(){
        return new RandomRule();
    }
}
4.Hystrix服务熔断8001(在提供服务处配置)
a.导入依赖
<!--       服务熔断服务降级-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-hystrix</artifactId>
            <version>1.4.6.RELEASE</version>
        </dependency>
        <!--        eurake服务提供方-->
        <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-eureka -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka</artifactId>
            <version>1.4.6.RELEASE</version>
        </dependency>
        <!--actuator完善监控信息-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

        <!--我们需要拿到实体类所以要配置api module-->
        <dependency>
            <groupId>com.xu</groupId>
            <artifactId>springCloud-Api</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <!--junit-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
        </dependency>
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-core</artifactId>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
        </dependency>
        <!--test-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-test</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--jetty-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jetty</artifactId>
        </dependency>
<!--        热部署-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
b.编写配置
server:
  port: 8001
#mybatis配置
mybatis:
  type-aliases-package: com.xu.springcloud.entity
  config-location: classpath:mybatis/mybatis-config.xml
  mapper-locations: classpath:mybatis/mapper/*.xml

#spring的配置 服务提供者的名称
spring:
  application:
    name: springcloud-provider-dept
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: org.gjt.mm.mysql.Driver
    url: jdbc:mysql://localhost:3306/springcloud?useUnicode=true&characterEncoding=utf-8
    username: root
    password: root
#Eureka的配置,服务注册到哪里
eureka:
  client:
    service-url:
      defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/
  instance:
    instance-id: springcloud-provider-dept8001 # 修改eureka上的默认描述信息!
    prefer-ip-address: true  # true,可以显示服务的IP地址 ~

#info配置
info:
  app.name: XJPSpringCloud-springcloud
  company.name: fateba.top
c.开启服务
@SpringBootApplication
@MapperScan("com.xu.springcloud.dao")
@EnableDiscoveryClient //服务的注册与发现
@EnableCircuitBreaker//添加对熔断的支持
public class DeptProvider_Hystrix_8001 {
    public static void main(String[] args) {
        SpringApplication.run(DeptProvider_Hystrix_8001.class,args);
    }
d.controller实现对服务的熔断及提醒
  //服务熔断 fallbackMethod =新的方法名
    @HystrixCommand(fallbackMethod = "hystrixGet")
    @GetMapping("/get/{id}")
    public Dept get(@PathVariable("id") Long id){
        Dept dept = iDeptService.queryById(id);
        //当dept==null时 会熔断当前服务,执行hystrixGet()方法
        if (dept==null){
          throw  new RuntimeException("报错");
        }
        return dept;
    }

    public Dept hystrixGet(@PathVariable("id") Long id){
        Dept dept = new Dept();
        dept.setDeptno(id);
        dept.setDname("阿崔提醒您-->您本次输入的部门号不存在");
        dept.setDbSource("您好!我是阿崔!-->没有这个数据库");
        return dept;
        
//====================================================================================== //====================================================================================== 
   //这个注解是为了获取微服务列表的清单,方便团队开发
    @Autowired
    DiscoveryClient client;  
        /**
     *获取微服务列表的清单,方便团队开发
     */
        @GetMapping("/discovery")
    public Object discovery(){
        //获取微服务列表的清单
        List<String> services = client.getServices();
        //得到一个具体的微服务信息,通过具体的微服务id,applicaioinName;
        List<ServiceInstance> instances = client.getInstances("SPRINGCLOUD-PROVIDER-DEPT");
        System.out.println("discovery=>services:"+services);
        for (ServiceInstance instance : instances) {
            System.out.println(
                    instance.getHost()+"\t"+
                            instance.getPort()+"\t"+
                            instance.getUri()+"\t"+
                            instance.getServiceId()

            );
        }
        return this.client;
    }
5.Hystrix Dashdoard服务监控9001

使用服务器监控的前提:所有提供服务者必须加入该监控依赖以及启动类上加入一个select

        <!--actuator完善监控信息-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

  /**
     * 配置对服务的监控  这个配置是固定的
     * @return
     */
    //增加一个 Servlet
    @Bean
    public ServletRegistrationBean hystrixMetricsStreamServlet(){
        ServletRegistrationBean registrationBean = new ServletRegistrationBean(new HystrixMetricsStreamServlet());
        registrationBean.addUrlMappings("/actuator/hystrix.stream");
        return registrationBean;
    }
a.导入依赖
<!--      服务的监控-->
      <dependency>
          <groupId>org.springframework.cloud</groupId>
          <artifactId>spring-cloud-starter-hystrix-dashboard</artifactId>
          <version>1.4.6.RELEASE</version>
      </dependency>

      <dependency>
          <groupId>org.springframework.cloud</groupId>
          <artifactId>spring-cloud-starter-hystrix</artifactId>
          <version>1.4.6.RELEASE</version>
      </dependency>
      <!--        这里是配置eureka服务端的依赖-->
      <dependency>
          <groupId>org.springframework.cloud</groupId>
          <artifactId>spring-cloud-starter-eureka</artifactId>
          <version>1.4.6.RELEASE</version>
      </dependency>
      <dependency>
          <groupId>org.springframework.cloud</groupId>
          <artifactId>spring-cloud-starter-ribbon</artifactId>
          <version>1.4.6.RELEASE</version>
      </dependency>
      <dependency>
          <groupId>org.springframework.cloud</groupId>
          <artifactId>spring-cloud-starter-config</artifactId>
      </dependency>
      <dependency>
          <groupId>com.xu</groupId>
          <artifactId>springCloud-Api</artifactId>
          <version>1.0-SNAPSHOT</version>
      </dependency>
      <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-web</artifactId>
      </dependency>
      <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-devtools</artifactId>
      </dependency>
b.编写配置
server:
  port: 9001
c.开启服务
@SpringBootApplication
//HystrixDashboard监控注解
@EnableHystrixDashboard
public class HystrixConsumer_9001 {
    public static void main(String[] args) {
        SpringApplication.run(HystrixConsumer_9001.class,args);
    }
}
d.访问
http://localhost:9001/hystrix  <!--访问监控页面-->
<!--在监控页面决定监控8001服务-->
http://localhost:8001/actuator/hystrix.stream  
6.Zuul路由9527
a.导入依赖
<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-zuul</artifactId>
            <version>1.4.6.RELEASE</version>
        </dependency>
        <!--      服务的监控-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-hystrix-dashboard</artifactId>
            <version>1.4.6.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-hystrix</artifactId>
            <version>1.4.6.RELEASE</version>
        </dependency>
        <!--        这里是配置eureka服务端的依赖-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka</artifactId>
            <version>1.4.6.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-ribbon</artifactId>
            <version>1.4.6.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-config</artifactId>
        </dependency>
        <dependency>
            <groupId>com.xu</groupId>
            <artifactId>springCloud-Api</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
        </dependency>
b.编写配置
server:
  port: 9527

eureka:
  client:
    service-url:
      defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/
  instance:
    instance-id: wstcxjp.com   # 服务端的id
    prefer-ip-address: true     # 是否显示ip

spring:
  application:
    name: springcloud-zuul-dept

info:
  app.name: xu-springcloud
  company.name: fateba.top

zuul:
  host:
    connect-timeout-millis: 3000
    socket-timeout-millis: 3000
  routes:               # 相当于代理服务名为springcloud-provider-dept的服务者
    mydept.serviceId: springcloud-provider-dept  # 原服务名
    mydept.path: /mydept/**   # 新的替换过后的虚拟服务名,用于请求
  ignored-services: "*"  # 不能再使用这个路径访问了,ignored : 忽略,隐藏全部的~
#  prefix: /kuang # 设置公共的前缀

# 添加ribbon的超时时间设置
ribbon:
  ReadTimeout: 3000
  ConnectTimeout: 3000
# 配置zuul
hystrix:
  command:
    default:
      execution:
        isolation:
          thread:
            timeout-in-milliseconds: 3000
c.开启服务
@SpringBootApplication
//路由配置
@EnableZuulProxy
public class zuul9527 {
    public static void main(String[] args) {
        SpringApplication.run(zuul9527.class,args);
    }
}
d.访问
<!--/mydept是代理的服务名,/Dept/get/1是提供服务方的restful请求路径-->
localhost:9527/mydept/Dept/get/1
<!--也可以把localhost换成网址-->
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值