一、spring cloud简介

Spring Cloud为开发人员提供了用于快速构建分布式系统中某些常见模式的工具(例如,配置管理,服务发现,断路器,智能路由,微代理,控制总线)。分布式系统的协调产生了样板模式,并且使用Spring云开发人员可以快速支持实现这些模式的服务和应用程序。

二、spring cloud搭建

1.创建空项目

2.创建注册中心

1.创建模块

2.添加配置

01.添加注解

@EnableEurekaServer

02.添加配置 

server.port #端口

eureka.client.service-url.defaultZone      #指定当前eureka客户端的注册地址
eureka.client.register-with-eureka           #自身 不在向eureka注册
eureka.client.fetch-registry                      #启动时禁用client的注册
eureka.instance.hostname                      #指定应用名称

server.port=8762
eureka.instance.hostname=eureka-server
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
eureka.client.serviceUrl.defaultZone= http://${eureka.instance.hostname}:${server.port}/eureka/

03.运行项目,项目启动后根据您自定义的端口到浏览器访问,如出现以下图片内容,注册中心配置搭建完成

三、创建服务提供者

1.创建模块

 2.添加配置

01.添加注解 

 

 02.添加配置

server.port # 服务端口号
spring.application.name #服务名称 - 服务之间使用名称进行通讯
eureka.instance.hostname= localhost
eureka.client.register-with-eureka #是否需要将自己注册到注册中心
eureka.client.fetch-registry #需要搜索服务信息
eureka.client.service-url.defaultZone # 注册中心服务器地址
server.port=8071
spring.application.name=servicesuppot
eureka.client.register-with-eureka=true
eureka.client.fetch-registry=true
eureka.instance.hostname= localhost
eureka.client.service-url.defaultZone= http://${eureka.instance.hostname}:8763/eureka

03.运行提供者服务,项目启动后去到原先注册中心网页上如出现以下图片内容,微服务配置搭建完成

四、创建服务消费者

同上创建另一个微服务项目,添加注解与配置

server.port=8073
spring.application.name=serviceconsume
eureka.client.register-with-eureka=true
eureka.client.fetch-registry=true
eureka.instance.hostname= localhost
eureka.client.service-url.defaultZone= http://${eureka.instance.hostname}:8763/eureka

五、服务与服务之前通讯

1.创建接口

@RestController
@RequestMapping("/Hello")
public class Controller {
    @RequestMapping("/World")
    public String helloWorld(String s) {
        System.out.println("名字为:" + s);
        return "名字为:" + s;
    }
}

重起服务

 接口调用成功返回

2.调用服务

01.restTemplate+ribbon

需要一个@Bean的注解自动注入并直接调用restTemplate对象调用服务

@Configuration
public class Beans {
    //管理简单对象
    @Bean
    @LoadBalanced
    public RestTemplate getRestTemplate(){
        return new RestTemplate();
    }
}

@RestController
@RequestMapping("/Hello")
class ConsumerController {
    @Autowired
    private LoadBalancerClient loadBalancerClient;
    @Autowired
    private RestTemplate restTemplate;
    @RequestMapping("/Consumer")
    @HystrixCommand(fallbackMethod = "errorcode")
    public String helloWorld(String s){
        System.out.println("传入的值为:"+s);
       
        String forObject = restTemplate.getForObject("http://client001/Hello/World?s=" + s, String.class);
        return forObject;
    }

 02.feign

..........................................

六、关于Feign

Feign是一个http请求调用的轻量级框架,可以以Java接口注解的方式调用Http请求。Spring Cloud引入 Feign并且集成了Ribbon实现客户端负载均衡调用。

1.添加依赖

 <dependency>
         <groupId>org.springframework.cloud</groupId>
         <artifactId>spring-cloud-starter-openfeign</artifactId>
         <version>2.1.1.RELEASE</version>
 </dependency>

2.添加注解

@EnableFeignClients

3.创建service

@FeignClient("servicesuppot")
@Service
public interface HollerService {
    @PostMapping("/Hello/World")
    public String helloWorld(@RequestParam(value = "s") String s);
}

4.创建接口

@RestController
@RequestMapping("/Hello")
class ConsumerController {
    @Autowired
    HollerService hollerService;
    @RequestMapping("/say")
    public String sayHelloWorld(String s){
        System.out.println("传入的值为:"+s);
        return hollerService.helloWorld(s)+"   sayHelloWorld";
    }
}

重启服务,网页再访问

七、关于Ribbon

Ribbon是一个客户端负载均衡器,它提供了对HTTP和TCP客户端的行为的大量控制。实现Feign调用Ribbon负载均衡的服务提供者

1.添加依赖

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

2.添加配置

该配置之前已添加过了,只需要重要关注  @LoadBalanced

@Configuration
public class Beans {
    //管理简单对象
    @Bean
    @LoadBalanced
    public RestTemplate getRestTemplate(){
        return new RestTemplate();
    }
}

3.服务测试

服务之间的相互访问完成了 到这里springcloud最基本的环境搭建就完成了,现在我们来创建几个服务来供消费服务去调用

01.启动注册中心服务

02.修改接口

修改一个接口调用端口信息

@RestController
@RequestMapping("/Hello")
public class Controller {

    @Value("${server.port}")
    String port;

    @RequestMapping("/World")
    public String helloWorld(String s) {
        System.out.println("名字为:" + s);
        return "出于端口为"+port+",名字为:" + s;
    }
}

03.创建多个服务

 04.启动提供服务

启动第一个服务,将prperties配置端口设为:8073 再启动服务

启动第一个服务,将prperties配置端口设为:8072 再启动服务

 启动第一个服务,将prperties配置端口设为:8071 再启动服务

 到注册中心可以看到同一个服务名称开启了三个端口独立运行服务都顺利运行了

 05.启动消费服务

  06.接口访问

 

八、关于Hystrix

Hystrix是供分布式系统使用,提供延迟和容错功能,隔离远程系统、访问和第三方程序库的访问点,防止级联失败,保证复杂的分布系统在面临不可避免的失败时,仍能有其弹性。

意思是:上面我们建立了两个服务eureka-servicesuppot、eureka-serviceconsume ,我们以A,B来称呼。Hystrix 负责监控服务之间的调用情况,当B服务去调用A服务连续多次失败的情况。当调用的服务出现故障时,出现请求堆积、资源占用,慢慢扩散到所有微服务,引发雪崩效应。Hystrix 会进行熔断,调用保护的方法就是使用 Fallback,就可以使用 Fallback 方法的返回值;Hystrix 间隔时间会再次检查故障的服务,如果故障服务恢复,将继续使用服务。

1.添加依赖

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

 2.添加配置

@EnableHystrix

3.创建fallback方法并添加注解

    @HystrixCommand(fallbackMethod = "errorcode")
    public String errorcode(String s){
        return s+"error request";
    }

4.调用服务

项目中的两个微服务eureka-servicesuppot【A服务】、eureka-serviceconsume【B服务】,假定B服务要调用A服务,当A服务异常,此时B服务调用A服务的时候,B服务Hystrix 会进行熔断,调用fallback

1.启动服务

 2.调用服务

在这时候会发现此时B服务调用A服务的时候出现故障,就使用 Fallback 方法的返回值;Hystrix 间隔时间会再次检查故障的服务,如果故障服务恢复,将继续使用服务。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐