spring cloud开发基本教程

Eureka注册中心

简单注册中心搭建

  • 新建spring boot 项目(可根据实际需求建maven模块)  详情可查看
  • 添加pom依赖
                <dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-eureka-server</artifactId>
		</dependency>
  • 添加配置信息(配置文件支持properties和yml两种格式,这里以properties文件为例)
#设置端口号
server.port=8761
#设置eureka相关配置
eureka.instance.hostname=localhost
eureka.client.registerWithEureka=false
eureka.client.fetchRegistry=false
eureka.client.serviceUrl.defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka/
  • 启动项添加注解
@EnableEurekaServer

其它配置详解

#服务注册中心实例的主机名
eureka.instance.hostname=localhost
#是否向服务注册中心注册自己,为false就是只作为注册中心,不向外提供服务
eureka.client.register-with-eureka=false
#是否检索服务
eureka.client.fetch-registry=false
#自我保护配置,可以设置改参数值为false,以确保注册中心将不可用的实例删除
eureka.server.enable-self-preservation=false
#清理无效节点的时间间隔,默认60000毫秒,即60秒
eureka.server.eviction-interval-timer-in-ms=60

 Eureka-注册中心集群配置

双节点注册中心

同上述步骤新建两个注册中心,分别修改其配置文件

server.port=8000
spring.application.name=spring-cloud-eureka
eureka.instance.hostname=service1
#作为service1服务中心的配置,并将serviceUrl指向service2
eureka.client.serviceUrl.defaultZone=http://service2:8001/eureka/
spring.application.name=spring-cloud-eureka
server.port=8001
eureka.instance.hostname=service2
#作为service2服务中心的配置,并将serviceUrl指向service1
eureka.client.serviceUrl.defaultZone=http:/service1:8000/eureka/

在hosts文件中加入如下配置

127.0.0.1 service1  
127.0.0.1 service2  

 依次执行下面命令

#打包
mvn clean package
# 分别以service1和service2 配置信息启动eureka;spring-cloud-eureka-0.0.1-SNAPSHOT.jar为所打项目jar包
java -jar spring-cloud-eureka-0.0.1-SNAPSHOT.jar --spring.profiles.active=service1
java -jar spring-cloud-eureka-0.0.1-SNAPSHOT.jar --spring.profiles.active=service2

 eureka集群使用

同上述步骤新建两个注册中心,分别修改其配置文件

spring.application.name=spring-cloud-eureka
spring.profiles=service1
server.port=8000
eureka.instance.hostname=service1
eureka.client.serviceUrl.defaultZone=http://service2:8001/eureka/,http://service3:8002/eureka/


spring.application.name=spring-cloud-eureka
spring.profiles=service2
server.port=8001
eureka.instance.hostname=service2
eureka.client.serviceUrl.defaultZone=http://service1:8000/eureka/,http://service3:8002/eureka/


spring.application.name=spring-cloud-eureka
spring.profiles=service3
server.port=8002
eureka.instance.hostname=service3
eureka.client.serviceUrl.defaultZone=http://service1:8000/eureka/,http://service2:8001/eureka/

分别以service1、service2、service3的配置参数启动eureka注册中心。

java -jar spring-cloud-eureka-0.0.1-SNAPSHOT.jar --spring.profiles.active=service1
java -jar spring-cloud-eureka-0.0.1-SNAPSHOT.jar --spring.profiles.active=service2
java -jar spring-cloud-eureka-0.0.1-SNAPSHOT.jar --spring.profiles.active=service3

服务模块

简单服务模块搭建(往注册中心注册服务)

  • 新建spring boot项目(可根据实际需求建maven模块) 
  • 添加pom依赖
                <dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-eureka</artifactId>
		</dependency>
  • 添加配置信息
#配置端口号
server.port=8762
#配置注册中心地址
eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka/
#配置服务名
spring.application.name=user-service
  • 启动类添加注解
@EnableEurekaClient

 其它配置详解

#是否需要去检索寻找服务,默认是true
eureka.client.fetch-registry=true
#表示eureka client间隔多久去拉取服务注册信息,默认为30秒,对于gateway,如果要迅速获取服务注册状态,可以缩小该值,比如5秒
eureka.client.registry-fetch-interval-seconds=5
#修改实例的状态页面地址,相对路径,也支持绝对路径,例如需要支持https,默认为/info
eureka.instance.health-check-url-path=/xxx/health
#修改健康监控地址,相对路径,也支持绝对路径,例如需要支持https,默认为/health
eureka.instance.status-page-url-path=/yyy/info
#表示eureka client发送心跳给server端的频率,默认5秒
eureka.instance.lease-renewal-interval-in-seconds=5
#表示eureka server至上一次收到client的心跳之后,等待下一次心跳的超时时间;超时移除该instance
eureka.instance.lease-expiration-duration-in-seconds=90

Zuul网关

简单zuul网关搭建(实现网关路由)

  • 新建spring boot 项目(可根据实际需求建maven模块) 
  • 添加pom依赖
                <dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-eureka</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-zuul</artifactId>
		</dependency>
  • 添加配置信息
#配置端口号
server.port=5000
#配置服务名
spring.application.name=gateway-service
#配置注册中心地址
eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka/
#配置网关过滤的url前缀
zuul.routes.api-a.path=/user-api/**
#配置网关路由的服务
zuul.routes.api-a.serviceId=user-service
  • 添加zuul网关过滤器
package com.filter;

import com.netflix.zuul.ZuulFilter;
import org.springframework.cloud.netflix.zuul.filters.support.FilterConstants;
import org.springframework.stereotype.Component;

@Component
public class DemoFilter extends ZuulFilter {
    @Override
    public String filterType() {
        return FilterConstants.POST_TYPE;
    }
    @Override
    public int filterOrder() {
        return 900;
    }
    @Override
    public boolean shouldFilter() {
        return true;
    }
    @Override
    public Object run() {
        //可以用来进行登录验证,验签等操作
        return null;
    }
}
  • 启动类添加注解
@EnableZuulProxy
@EnableEurekaClient

其他配置详解

#该参数用来开启重试机制
spring.cloud.loadbalancer.retry.enabled=true
#断路器的超时时间,断路器的超时时间需要大于ribbon的超时时间,不然不会触发重试。
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=10000
#ribbon请求连接的超时时间
ribbon.ConnectTimeout=250
#请求处理的超时时间
ribbon.ReadTimeout=1000
#对所有操作请求都进行重试
ribbon.OkToRetryOnAllOperations=true
#对当前实例的重试次数
ribbon.MaxAutoRetries=1
#对下个实例的重试次数
ribbon.MaxAutoRetriesNextServer=1
#为路由规则设置公共的前缀
zuul.prefix=/myapi
#关闭全局重试机制
zuul.retryable=false
#关闭<service>服务的重试机制
zuul.routes.<service>.retryable=false

反向代理(通过url路由)

zuul.routes.user.path: /user/**
#访问路径/user跳转到百度页面
zuul.routes.user.url: http://www.baidu.com

通过Eurek服务路由

zuul.routes.api-a.path=/user-api/**
#访问路径/user-api/xxx/yyy可访问到user-service服务上的/xxx/yyy接口
zuul.routes.api-a.serviceId=user-service

#等同于上面两行配置    zuul.routes.<服务名>=<路由规则>
zuul.routes.user-service=/user-api/**

路由到本地(网关服务)

zuul.routes.local.path=/local/**
#访问/local路由到本地(网关)的/user/local接口
zuul.routes.local.url=forward:/user/local

路由规则详解

通配符 含义 举例 解释
? 匹配任意单个字符 /demo/? 匹配 /demo/a
* 匹配任意数量的字符 /demo/*

匹配 /demo/abc

但不可匹配 /demo/a/b/c

** 匹配任意数量的字符 /demo/**

匹配 /demo/abc

也可匹配 /demo/a/b/c

注: 网关的配置文件最好才用yaml配置,因为在yml文件上配置路由有顺序,上面配配好就匹配下面了,例如:

zuul:
 routes:
  feign-consumer-hello:
   path: /feign-consumer/hello/**
   serviceId: feign-consumer-hello
  feign-consumer:
   path: /feign-consumer/**
   serviceId: feign-consumer

访问/feign-consumer/hello/**会路由到服务feign-consumer-hello,虽然/feign-consumer/hello/**也符合路由规则

/feign-consumer/hello/**,但因为/feign-consumer/hello/**配置在前,则路由到feign-consumer-hello.

未完待续

猜你喜欢

转载自blog.csdn.net/qq_41609208/article/details/82178835