springcloud学习笔记

springcloud学习笔记

[email protected]

2018-07-27

本文参考:

蚂蚁课堂教程余胜军教程;

http://blog.csdn.net/forezp/article/details/70148833 方志朋的博客

正文

springcloud主要包含组建:eureka,ribbon,feign,hystrix,zuul,config,zookeeper;

一般项目只需要:eureka,feign,hystrix,config;就可以组建;这里也简单使用这几个组建学习;

1 eureka是服务注册与发现

eureka包含两部分,1服务注册中心,2服务客户端包含生产者和消费者两种;

服务注册中心是负责发现管理各种服务接口的中心;所有生产者和消费者都必须注册到本中心才可以被使用;注册中心设置非常简单,只需要在一个springboot项目上加入简单注解开启服务即可;接下来就是在配置文件中加入相关配置:如下

 

#这里是注册中心;

server:

port: 8761

spring:

application:

#这个名字是注册中心显示的服务名称;

name: eureka1

 

eureka:

instance:

#这个主机名一般没有用;服务注册时需要的是IP;

hostname: cloudserver

#开启关闭自我保护功能;默认是ture,

#自我保护是指当服务心跳超时时是否保留服务注册信息;开启后会保留注册信息;关闭后当服务心跳超时则剔除对应注册信息;

server:

enable-self-preservation: false

#设置本节点为服务注册中心;需要关闭fetch-registry;和register-with-eureka;这就是关闭这个客户端的注册申请,让他作为server; 这个是单例模式;如果是高可用就不需要设置这两项;

client:

# fetch-registry: false

# register-with-eureka: false

# 指定本服务注册目标地址;可以使用","分隔多个地址;

service-url:

defaultZone: http://localhost:9991/eureka/,http://localhost:9992/eureka/

#eureka是springcloud的注册中心;是服务发布中心;可是实现高可用;这里只作为demo单实例运行;

注意缩进;这里不是很明显;

服务生产者就是简单的springboot项目;只需要在入口类上加上相关注解,在配置文件中加入配置即可;

@EnableEurekaClient//表示开启生产者模式;

配置文件如下:

 

#这里是生产者;

server:

port: 8762

spring:

application:

name: service-hi #本name是在注册中心注册的名称,也是其他消费者访问时的名称;

 

#只需要在springboot项目中加入一下配置就可以成功将服务注册到eureka服务中心;

eureka:

client:

serviceUrl:

#指定注册中心地址;

defaultZone: http://localhost:8761/eureka/

#设置心跳和熔断时间;

# instance:

# lease-renewal-interval-in-seconds: 2

# lease-expiration-duration-in-seconds: 3

服务消费者就是调用服务的客户端;这里稍微复杂一点;这里使用feign客户端模式;feign自带负载均衡;使用更加方便;

首先在主类上加入注解开启服务框架;

 

@EnableFeignClients

@EnableDiscoveryClient

@SpringBootApplication

然后编写接口调用服务:

 

/**

* 消费者通过接口注解方式消费;

*

*@FeignClient注解的两个属性意思是:value是值调用服务的名称,fallback是调用失败返回接口类;

*

* @author [email protected]

* @date 2018年7月5日

*/

@FeignClient(value="service-hi",fallback=SchedualServiceHiHystric.class)

public interface SchedualServiceHi {

 

@RequestMapping(value="/hi",method=RequestMethod.GET)

String sayHiFromClientOne(@RequestParam(value="name")String name);

}

 

/**

* 当消费者请求超时时返回本类信息;

* 本类需实现消费接口;每个方法重写一个超时信息;

* @author [email protected]

* @date 2018年7月5日

*/

@Component

class SchedualServiceHiHystric implements SchedualServiceHi {

@Override

public String sayHiFromClientOne(String name) {

return "sorry "+name;

}

}

然后controller层就可以把这里当作服务层调用了;

配置文件:

 

#这里是消费客户端;

server:

port: 8765

servlet:

context-path:

spring:

application:

name: service-feign

#指定注册地址;

eureka:

client:

serviceUrl:

defaultZone: http://192.168.3.167:9991/eureka/,http://localhost:9992/eureka/

#启用熔断机制;

feign:

hystrix:

enabled: true

注册简单认证:

1、 服务端添加依赖

org.springframework.boot

spring-boot-starter-security

2 服务端配置:

添加security依赖后默认开启密码认证;如不设置用户名密码会在日志输出user的默认密码需要仔细查找;所以还是设置好密码较好;设置如下:

spring:

security:

user:

name: xxxx

password: xxxx

roles: user

另外,最新springcloud默认开启csrf;所以需要关闭;添加配置类如下:

springcloud学习笔记_第1张图片

3 客户端配置:

在配置的 defaultZone: http://192.168.3.167:9991/eureka/,http://localhost:9992/eureka/

的IP前面加上用户名密码,如: http://user:[email protected]:9991/eureka/

二 hystrix断路器

feign自带断路器;但是默认是关闭的;这里需要在配置文件开启,如上面这个配置文件的#启动熔断机制配置;

三 config配置中心

配置中心可以是实现远程配置,这里支持配置文件在git或gitee上;它支持配置服务放在配置服务的内存中(即本地),也支持放在远程Git仓库中。

这里需要两个角色;一个是config server,一个是configclient;

server同样只需要在主类注解开启;然后编写配置文件即可;

@SpringBootApplication

@EnableConfigServer

server:

port: 8888

 

spring:

application:

name: config-server

cloud:

config:

server:

git:

#仓库地址;

uri: https://gitee.com/clouds234/springcloud configfile.git

#搜索目录;还不清楚具体情况;

search-paths: respo

#仓库用户名密码

username:

password:

#配置文件分支;

label: master

 

client端直接配置文件编写就可以了;这里为了证明的确读取了配置文件;特地设置一个自定义变量,通过访问改变了证明是读取的远端配置文件;

 

spring:

application:

name: config-client

cloud:

config:

#配置文件所在分支;

label: master

#配置文件版本;

profile: dev

#配置服务位置;

uri: http://localhost:8888/

#配置重试,默认重试6次,最初延迟1s;后续是前一次的1.2倍;

retry:

initial-interval: 2000

max-attempts: 6

max-interval: 4000

multiplier: 1.5

server:

port: 8881

证明读取远端配置文件的实例:

在远端git仓库添加文件:config-client-dev.properties文件内容为:foo = foo version 3

在client端controller层添加如下代码:!!!注意;在本项目配置文件中是没有foo变量的;

@Value("${foo}")

String foo;

@RequestMapping(value = "/hi")

public String hi(){

return foo;

}

通过浏览器访问可以看到:

foo version 3

结果总结:使用远端控制的表现就是,git中的配置文件内容可以直接当作cli端配置文件使用;无需在cli配置文件中添加其他内容;

四 zuul路由网关

路由网关可以实现负责均衡和安全过滤;

zuul作为反向代理服务器;可以对老服务进行转发到新服务区;

关于zuul的知识非常多,而且对于大型分布式微服务架构非常重要;

另见;

 

五 服务访问鉴权

在微服务架构中,每个服务的权限控制是相对单实例来说复杂的多的;目前比较简单使用的框架有两个,一个是jwt,一个是oauth2;两种方式基本都是基于token的方式完成的,单两种又有不同的优势;还有一种是使用私钥的方式;当然对于安全要求较低的系统,可以在内网进行宽泛权限认证;

 

六 feign日志

Feign日志记录

为每个创建的Feign客户端创建一个记录器。默认情况下,记录器的名称是用于创建Feign客户端的接口的完整类名。Feign日志记录仅响应DEBUG级别。

 

application.yml

 

logging.level.project.user.UserClient: DEBUG

您可以为每个客户端配置的Logger.Level对象告诉Feign记录多少。选择是:

NONE,无记录(DEFAULT)。

BASIC,只记录请求方法和URL以及响应状态代码和执行时间。

HEADERS,记录基本信息以及请求和响应标头。

FULL,记录请求和响应的头文件,正文和元数据。

例如,以下将Logger.Level设置为FULL:

 

@Configuration

public class FooConfiguration {

  1. @Bean
  2.  

Logger.Level feignLoggerLevel() {

return Logger.Level.FULL;

}

}

 

七 Spring Cloud Stream

Spring Cloud Stream是构建消息驱动的微服务应用程序的框架。

Spring Cloud Stream为Kafka和Rabbit MQ提供Binder实现。

具体使用方法参见:

https://springcloud.cc/spring-cloud-dalston.html#_declaring_and_binding_channels

springcloud stream目录;

使用kafka或者rabbitmq都可以使用maven坐标导入对应的驱动程序;

你可能感兴趣的:(springcloud)