springCloud入门_02

服务器负载均衡

为了提供并发量,有时同一个服务提供者可以部署多个(商品服务)。这个客户端在调用时要根据一定的负责均衡策略完成负载调用。

服务提供者集群——实际生产就是同一种服务多部署几台服务器,开发时就是用端口来区分。
  1. 拷贝一份8001

  2. 修改主类-改名

  3. 改8002yml,端口

  4. 服务提供者
    8001
    8002

  5. 重启注册中心,和两个服务提供者,如以下效果就ok

服务消费者常见负载均衡实现技术

Ribbon 和 Feign
Feign:Ribbon是一个客户端负载均衡器,作用于服务消费者
feign底层还是ribbon,只是进行了封装,让我们以接口的方式进行调用
可以统计实现接口的代理对象,通过代理对象完成完成调用。

Ribbon负载均衡测试

Ribbon是一个客户端负载均衡器,作用于服务消费者

  1. 创建项目
    普通maven项目
  2. 导入jar
<dependencies>
    <!--公共代码依赖-->
    <dependency>
        <groupId>cn.itsource.springcloud</groupId>
        <artifactId>User_interface</artifactId>
        <version>1.0-SNAPSHOT</version>
    </dependency>

    <!--springboot支持-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
    </dependency>

    <!--eureka客户端,服务消费者也要从注册中心获取可用服务列表-->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>

    <!--客户端负载均衡实现 ribbon-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>


   </dependencies>
  1. 配置
server:
  port: 9002
eureka:
  client:
    registerWithEureka: false #不注册到Eureka,不在注册中心显示
    service-url:
      #defaultZone: http://localhost:7001/eureka
      defaultZone: http://eureka-7001.com:7001/eureka,http://eureka-7002.com:7002/eureka
  1. 代码
@Configuration
public class CfgBean {

    @Bean
    @LoadBalanced //开启负载均衡
    public RestTemplate getRestTemplate(){
        return  new RestTemplate();
    }
}

@RestController
@RequestMapping("/consumer")
public class UserController {

    //多个方法调用只需改一处就ok
    //public static  final String URL_PREFIX = "http://localhost:8001";
    public static  final String URL_PREFIX = "http://USER-PROVIDER"; //通过服务名从注册中心获取服务列表,通过负载均衡调用

    @Autowired
    private RestTemplate restTemplate;

    @RequestMapping("/user/{id}")
    public User getUser(@PathVariable("id")Long id){
        //调用远程服务 http请求
        String url = URL_PREFIX+"/provider/user/"+id;
        return restTemplate.getForObject(url,User.class );
    }
}

然后测试

Feign负载均衡

1)	创建项目-copy
2)	导入jar
   
<dependencies>
    <!--公共代码依赖-->
    <dependency>
        <groupId>cn.itsource.springcloud</groupId>
        <artifactId>User_interface</artifactId>
        <version>1.0-SNAPSHOT</version>
    </dependency>

    <!--springboot支持-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
    </dependency>

    <!--eureka客户端,服务消费者也要从注册中心获取可用服务列表-->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>

    <!--feign的支持-->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-openfeign</artifactId>
    </dependency>
</dependencies>

   

3)	配置yml
   
server:
  port: 9003
eureka:
  client:
    registerWithEureka: false #不注册到Eureka,不在注册中心显示
    service-url:
      #defaultZone: http://localhost:7001/eureka
      defaultZone: http://eureka-7001.com:7001/eureka,http://eureka-7002.com:7002/eureka


4)	入口类
    @SpringBootApplication
@EnableEurekaClient
@EnableFeignClients(basePackages = "cn.itsource.microservice") //不在当前包下面
public class UserConsumerFeign9002Application {

	public static void main(String[] args) {
		SpringApplication.run(UserConsumerFeign9002Application.class, args);
	}
}

5)	写代码测试

Hystrix断路器

当某一个服务出现延迟时,所有的请求都阻塞在依赖的服务,会出现
雪崩现象:由于某些服务出问题,导致很多问题的现象就叫雪崩
Hystrix是保证微服务群健壮框架,做了隔离,熔断,降级等操作.最终达到不会由于某一个服务出问题而导致雪崩现象,让整体群死掉.

实现:

1)拷贝服务提供者
2)Pom

    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
    </dependency>

3)代码
主类:
在这里插入图片描述

服务代码:
在这里插入图片描述

4)测试

在这里插入图片描述在这里插入图片描述

注意:
1 熔断是在服务提供方做
2 调用时不能使用feign调用(有自己熔断机制),要用ribbon调用

Zuul路由网关

Zuul 是netflix开源的一个API Gateway 服务器, 本质上是一个web servlet应用。
Zuul 在云平台上提供动态路由,监控,弹性,安全等边缘服务的框架。Zuul 相当于是设备和 Netflix 流应用的 Web 网站后端所有请求的前门,也要注册入Eureka.

实现

创建zuul_gateway_4399
导入pom

<!--springboot支持-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
</dependency>

	<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
		</dependency>

		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-netflix-zuul</artifactId>
		</dependency>

修改yml

        server:
  port: 4399
spring:
  application:
    name: ZUUL-GATEWAY
eureka:
  client:
    service-url:
      defaultZone: http://localhost:7001/eureka #集群环境配置需要改一下
  instance:
    instance-id: gateway-9527.com
    prefer-ip-address: false

修改入口类
在这里插入图片描述
启动测试
Eureka 服务提供者 zuul

    启动一个服务的提供者:
         直接访问地址:http://localhost:8001/user/provider/1
         路由访问地址:http://localhost:4399/user-provider(小写)/user/provider/1

SpringCloud Config分布式配置中心

在分布式系统中,由于服务数量巨多,为了方便服务配置文件统一管理,实时更新,所以需要分布式配置中心组件。在Spring Cloud中,有分布式配置中心组件spring cloud config ,它支持配置服务放在配置服务的内存中(即本地),也支持放在远程Git仓库中。在spring cloud config 组件中,分两个角色,一是config server,二是config client。

实现

创建springboot项目并且导入jar

<dependencies>
    <!--springboot支持-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
    </dependency>

    <!--eureka客户端-->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>
    <!--配置中心支持-->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-config-server</artifactId>
    </dependency>
</dependencies>

Yml

server:
  port: 1299
eureka:
  client:
    service-url:
      defaultZone: http://eureka-7001.com:7001/eureka,http://eureka-7002.com:7002/eureka # 集群

  instance:
    prefer-ip-address: true
spring:
  application:
    name: spring-cloud-config-server
  cloud:
    config:
      server:
        git:
          uri: https://github.com/hpyao/microservice-config.git
          username: hpyao
          password: Itsource20190329

启动类

@SpringBootApplication
@EnableEurekaClient //加入注册中心
@EnableConfigServer //启用配置服务端
public class ConfigServerApplication_1299 {
    public static void main(String[] args) {
        SpringApplication.run(ConfigServerApplication_1299.class);
    }
}
测试
http://localhost:1299/application-user/test
http://localhost:1299/application-user/dev

客户端配置

  1. 新建config_client_3355 springboot项目,为了读取github的配置文件
  2. 导入jar
<dependencies>
    <!--springboot支持-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
    </dependency>
<!--eureka客户端-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

    <!--configclient端-->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-config</artifactId>
    </dependency>
</dependencies>

准备yml
全局bootstrap.yml

    
spring:
Application
Name 
  cloud:
    config:
      name: application-user #github上面名称
      profile: test #环境
      label: master #分支
      uri: http://127.0.0.1:1299 #配置服务器
eureka:
  client:
    service-url:
     defaultZone: http://eureka-7001.com:7001/eureka,http://eureka-7002.com:7002/eureka # 集群

  instance:
    prefer-ip-address: true #显示客户端真实ip



局部application.yml 可以不要

   
 spring:
  application:
    		name: MICROSERVICE-USER

优先级:Bootstrap > application

  1. 入口类
@SpringBootApplication
@EnableEurekaClient
public class ConfigClientApplication {
    public static void main(String[] args) {
        SpringApplication.run(ConfigClientApplication.class,args);
    }
}
  1. 测试
    如果读取到就会有application.name,这个名字会显示在Eureka里面,通过Eureka上面名字判断是否读取到了

在整个项目中需要一个config-server 所有的其他项目都对应一个config-clent,无论是provider consumer eureka等

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值