秒杀系统SpringCloud架构选型以及后台代码搭建(二)

eureka服务搭建

euerka简单介绍

1.什么是服务治理
Springcloud封装了Netflix公司开发的Eureka来实现服务治理。

服务治理管理服务与服务之间的依赖关系,可以实现服务调用、负载均衡、容错等,实现服务注册于发现。

2.什么是服务注册与发现
  Eureka采用CS架构。EurekaServer作为服务注册的服务器,它是注册中心。而系统中的其他服务,使用eureka的客户端连接到EurekaServer并维持心跳连接。这样系统的维护人员可以通过eurekaserver来监控系统各个服务的运行情况。

在服务注册发现中,有一个注册中心。当服务器启动时会把当前服务器自己的信息,比如服务地址、通讯地址等以别名方式注册到注册中心。另一方(消费者),以别名的方式到注册中心获取到实际的地址,然后再实现本地的服务调用。

3.Eureka的两个组件
  EurekaServer提供注册服务,各个微服务节点通过配置启动后,会在eureka服务中进行注册。这样EurekaServer服务注册表中将会存储所有可调用服务节点的信息,服务节点的信息可以在界面中直观的看到。

EurekaClient通过注册中心获取服务。是一个Java客户端,用于简化EurekaServer的交互;具备一个内置的、使用轮询(round-robin)负载算法的负载均衡器。在应用启动后,将会向Eureka Server发送心跳(默认30s)。如果EurekaServer在多个心跳周期内没有接收到某个节点的心跳,EurekaServer将会从注册表中把这个服务节点移除(默认90s)。

代码搭建

项目架构如图
在这里插入图片描述

maven依赖

<?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">
    <parent>
        <artifactId>kimwu_kill_mall</artifactId>
        <groupId>com.kimwu</groupId>
        <version>1.0.0</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>kimwu_kill_eureka</artifactId>

    <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-actuator</artifactId>
        </dependency>
    </dependencies>
</project>

配置文件

server:
  port: 17001


eureka:
  instance:
    hostname: localhost #eureka服务端的实例名称
  client:
    register-with-eureka: false #不注册自己
    fetch-registry: false #表示自己就是注册中心,不需要去检索服务
    service-url:
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
#      defaultZone: http://eureka7002.com:7002/eureka/

  server:
    #关闭自我保护机制,保证不可用服务被及时剔除
    enable-self-preservation: false
    eviction-interval-timer-in-ms: 2000

spring:
  application:
    name: kimwu-kill-eureka

启动类

/**
 * @author KimWu
 * @date 2020/6/2 22:47
 * @Description :
 */
@SpringBootApplication
@EnableEurekaServer //服务注册中心
public class EurekaApplication {
    public static void main(String[] args) {
        SpringApplication.run(EurekaApplication.class,args);
    }
}

zuul服务搭建

zuul简单介绍

1. Zuul 简介

Zuul 微服务网关是为Spring Cloud Netflix提供动态路由,监控,弹性,安全等服务的框架。可以和Eureka、Ribbon、Hystrix等组件配合使用。

2. Zuul 主要功能

1、 身份认证与安全:识别每个资源的验证要求,并拒绝那些与要求不符的请求。

2、审查与监控:在边缘位置追踪有意义的数据和统计结果,从而为我们带来精确的生产视图。

3、动态路由:动态地将请求路由到不同的后端集群;

4、压力测试:逐渐增加指向集群的流量,以了解性能;

5、为每一种负载类型分配对应容量,并弃用超出限定值的请求;

zuul服务搭建

项目架构如图
在这里插入图片描述
maven依赖

<?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">
    <parent>
        <artifactId>kimwu_kill_mall</artifactId>
        <groupId>com.kimwu</groupId>
        <version>1.0.0</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>kimwu_kill_zuul</artifactId>

    <dependencies>
        <!-- consul -->
        <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-actuator</artifactId>
        </dependency>
        <!-- zuul  -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-zuul</artifactId>
        </dependency>
        <dependency>
            <groupId>com.marcosbarbero.cloud</groupId>
            <artifactId>spring-cloud-zuul-ratelimit</artifactId>
            <version>1.3.4.RELEASE</version>
        </dependency>
        <!-- starter fail denpend -->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>2.9.9</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.9.9.1</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-hystrix</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-openfeign</artifactId>
        </dependency>
        <dependency>
            <groupId>com.netflix.hystrix</groupId>
            <artifactId>hystrix-javanica</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-commons</artifactId>
        </dependency>
        <!-- redis -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
    </dependencies>
</project>

配置文件

server:
  port: 17002

spring:
  application:
    name: kimwu-kill-zuul
  redis:
    cluster:
      nodes: 集群模式
    host: 192.186.110.165
    port: 7000
    timeout: 2000
    password: 密码

eureka:
  client:
    register-with-eureka: true #表示注册到eureka
    fetch-registry: true #是否从eurekaServer抓取已有的注册信息,集群必须设置为true才能配合ribbon使用负载均衡
    service-url:
      defaultZone: http://localhost:17001/eureka
#      defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka #集群版
  instance:
    instance-id: ${spring.application.name}
    prefer-ip-address: true #访问路径可以显示ip
  server: #关闭自我保护机制,保证不可用服务被及时剔除
    enable-self-preservation: false
    eviction-interval-timer-in-ms: 2000

zuul:
  host:
    connect-timeout-millis: 15000 #HTTP连接超时要比Hystrix的大
    socket-timeout-millis: 60000   #socket超时
  routes:
    kimwu-kill-order:
      path: /kimwu-kill-order/**
      service-id: kimwu-kill-order
      strip-prefix: true
      custom-sensitive-headers: true
  semaphore:
    max-semaphores: 5000


#负载配置
ribbon:
  ConnectTimeout: 10000
  ReadTimeout: 60000
  MaxConnectionsPerHost: 3000
  MaxTotalConnections: 3000

#熔断配置
hystrix:
  command:
    default:
      #断路器超时设置和请求的超时
      execution:
        isolation:
          thread:
            timeoutInMilliseconds: 60000
      #设置熔断器失败的个数
    circuitBreaker:
      requestVolumeThreshold: 1000
    #设置核心线程数
  threadpool:
    default:
      coreSize: 100
      maxQueueSize: 2000
      queueSizeRejectionThreshold: 2000



启动类


/**
 * @author KimWu
 * @date 2020/5/23 20:25
 * @Description :
 */
@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
@EnableZuulProxy
@EnableDiscoveryClient
@EnableEurekaClient
//@EnableResourceServer
public class ZuulApplication {
    public static void main(String[] args) {
        SpringApplication.run(ZuulApplication.class,args);
    }
}

公共组件

redis公共组件

架构如图
在这里插入图片描述
具体可参考git仓库

https://gitee.com/kim_wu94/kim-redis.git

该仓库功能:
集成redis操作 ①实现注解实现redis分布式锁,包括续命续时操作(业务时间过长key过期自动续命) ②实现redis键过期通知,发布订阅,键值过期处理 ③使用注解实现接口限流,redis实现方式 ④mybatis-plus使用redis作为二级缓存,添加注解即可

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值