前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SpringCloud简明教程笔记

SpringCloud简明教程笔记

作者头像
yawn
发布2019-09-23 15:26:07
6060
发布2019-09-23 15:26:07
举报

本文涵盖 spring cloud 学习示例程序,eureka,feign,rebbion,hystrix,zuul,config,bus使用示例(使用svn管理配置) 。

Eureka注册中心

Eureka服务端配置

@EnableEurekaServer

代码语言:javascript
复制
eureka:
  instance:
    hostname: localhost
  client:
    register-with-eureka: false #是否将eureka自身作为应用注册到eureka注册中心
    fetch-registry: false #为true时,可以启动,但报异常:Cannot execute request on any known server
    serviceUrl:
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

Eureka客户端配置

@EnableDiscoveryClient

代码语言:javascript
复制
spring:
  application:
    name: service-a
eureka:
  client:
    serviceUrl:
          defaultZone: http://localhost:8010/eureka/ #eureka服务注册地址

Ribbon 客户端的负载均衡

在注入RestTemplate调用服务时,加注解@LoadBalanced即可实现客户端的负载均衡。

Feign 作为http客户端,调用服务

@EnableFeignClients

代码语言:javascript
复制
@FeignClient(value = "service-provider")
public interface IProviderClient {

    @RequestMapping(method = RequestMethod.GET, value = "/car/{id}")
    String getCar(@PathVariable("id") int id);
}

建立一个接口,使用@FeignClient(value = "service-provider")注解标明要调用的服务名称为service-provider;在方法上使用@RequestMapping标明要调用的接口地址。之后在代码中调用这个方法,就会使用Feign作为http客户端去调用对应的接口。

Hystrix 熔断器保护被调用的服务方法

@EnableCircuitBreaker

代码语言:javascript
复制
feign:	
  hystrix:
    enabled: true
hystrix:
  command:
#    IProviderClient#getCar():      # 这是commandKey
    default:
      execution:
        isolation:
          thread:
            timeoutInMilliseconds: 2000   # 熔断条件1:请求超时时间
      circuitBreaker:
        requestVolumeThreshold: 10        # 熔断条件2:线程池的大小(每一个hystrix的command都分配一个线程池执行,即某时刻只允许最多同时10个客户端的请求)

如果调用失败,在feign的接口客户端添加fallback方法,即可设置默认的返回结果。如下:

代码语言:javascript
复制
@FeignClient(value = "service-provider", fallback = IProviderClientImpl.class)
public interface IProviderClient {

    @RequestMapping(method = RequestMethod.GET, value = "/car/{id}")
    String getCar(@PathVariable("id") int id);
}

IProviderClientImpl中getCar方法的返回值即为默认的返回值。

Zuul 网关分发

@EnableZuulProxy

代码语言:javascript
复制
zuul:
  ignored-services: microservice-provider-user # 需要忽视的服务(配置后将不会被路由)
  routes:
    first:
      path: /first/**     # 若路由名称配置为 first 则可以省略这句 (访问http://localhost/first/ca/23)
      url: http://localhost:8080    # 简单路由
    second:
      path: /second/**
      url: forward:/second   # 转发路由
    third:
      path: /third/**
      service-id: service-invoker

Config 配置中心

Config服务端

@EnableConfigServer

代码语言:javascript
复制
server:
  port: 8888
spring:
  application:
    name: config-server
  profiles:
    active: subversion
  cloud:
    config:
      server:
        svn:
          uri: https://192.168.50.33/svn/test
          username: yawn
          password: yawn
          default-label: trunk
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/
management:
  security:
    enabled: false

Config 客户端

代码语言:javascript
复制
spring:
  application:
    name: config-client
  cloud:
    config:
      discovery:
        enabled: true       # 根据服务id去查找配置服务器
        service-id: config-server   # 替代配置uri
      fail-fast: true
#      uri: http://localhost:8888
      profile: dev
      name: config-client
      label: trunk         # /trunk/config-client-dev.yml 也可以不指定,因为服务端指定default-label
  rabbitmq:
    host: localhost
    port: 5672
    username: guest
    password: guest
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/
management:
  security:
    enabled: false

http请求读取配置的匹配规则:

代码语言:javascript
复制
/{application}/{profile}[/{label}]
/{application}-{profile}.yml
/{label}/{application}-{profile}.yml
/{application}-{profile}.properties
/{label}/{application}-{profile}.properties

SpringCloud 单点登陆

基于 auth2.0 协议的认证

认证服务器

@EnableAuthorizationServer

代码语言:javascript
复制
server:
  port: 9999
  context-path: /uaa
security:
#  sessions: if_required
  ignored: /css/**,/js/**,/favicon.ico,/webjars/**
  user:
    name: yawn
    password: yawn
  oauth2:
    client:
      client-id: yawnClient
      client-secret: 123456
      scope: openid     # 表示权限范围,可选项,用户授权页面时进行选择
      authorized-grant-types: authorization_code #,refresh_token,password,client_credentials     # 有四种授权方式

资源服务器(用来向客户端提供用户的信息)

@EnableResourceServer

代码语言:javascript
复制
@Configuration
@EnableResourceServer
@RestController
public class ResourceServerConfig extends ResourceServerConfigurerAdapter {

    @GetMapping("user")
    public Map user(Principal principal) {
        Map user = new HashMap(4);
        user.put("name", principal.getName());
        user.put("description", principal.toString());
        return user;
    }

    @Override
    public void configure(HttpSecurity http) throws Exception {
        // Resource Server 的配置, 客户端获取用户信息 
        http.antMatcher("/user").authorizeRequests().anyRequest()
            .authenticated();
    }
}

需要认证的客户端

@EnableOAuth2Sso

代码语言:javascript
复制
server:
  port: 8080
security:
  oauth2:
    client:
      client-id: yawnClient
      client-secret: 123456
      access-token-uri: http://localhost:9999/uaa/oauth/token
      user-authorization-uri: http://localhost:9999/uaa/oauth/authorize
    resource:
      user-info-uri: http://localhost:9999/uaa/user

以上是springcloud各个组件的基本配置和使用方法,记录以备查询。

原文发布自 java技术分享站(jvm123.com):http://jvm123.com/2019/09/springcloud-jian.html

本文参与?腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客?前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体同步曝光计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Eureka注册中心
    • Eureka服务端配置
      • Eureka客户端配置
      • Ribbon 客户端的负载均衡
      • Feign 作为http客户端,调用服务
      • Hystrix 熔断器保护被调用的服务方法
      • Zuul 网关分发
      • Config 配置中心
        • Config服务端
          • Config 客户端
          • SpringCloud 单点登陆
            • 认证服务器
              • 资源服务器(用来向客户端提供用户的信息)
                • 需要认证的客户端
                相关产品与服务
                负载均衡
                负载均衡(Cloud Load Balancer,CLB)提供安全快捷的流量分发服务,访问流量经由 CLB 可以自动分配到云中的多台后端服务器上,扩展系统的服务能力并消除单点故障。负载均衡支持亿级连接和千万级并发,可轻松应对大流量访问,满足业务需求。
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
                http://www.vxiaotou.com