SpringBoot学习系列(二十)------SpringBoot和SpringCloud

SpringBoot学习系列(十九)------SpringBoot和SpringCloud

前言

SpringCloud是Spring全家桶中的一员,它是一个分布式的整体解决方案。Spring Cloud 为开发者提供了在分布式系统(配
置管理,服务发现,熔断,路由,微代理,控制总线,一次性token,全局琐,leader选举,分布式session,集群状态)中快速构建的工具,使用Spring Cloud的开发者可以快速的启动服务或构建应用、同时能够快速和云平台资源进行对接。因此,掌握SpringCloud栈,对于我们个人的技能提升也是很有帮助的,下面我们一起来学习SpringCloud的简单实用吧!

正文

1. SpringCloud五大组件
  • 服务发现:Netflix Eureka(相当于Zookeeper)
  • 负载均衡:Netflix Ribbon
  • 断路器:Netflix Hystrix
  • 服务网关:Netflix Zuul
  • 分布式配置:Spring Cloud Config

SpringCloud通过这五大组件,极大的方便了我们的项目开发,且在服务调用之间,实用轻量级的Http协议来调用,通俗易懂,下面我们就来使用一下.

2. 使用SpringCloud

首先我们来创建三个工程:

  • springboot-eureka:作为注册中心,其他两个工程都向该工程注册自己的服务
  • consumer-user:服务消费者,需要调用生产者发布的服务
  • provider-order:服务生产方,向外界暴露服务,并且将服务注册在eureka中

我们使用IDEA快速创建三个项目,需要注意的是,注册中心和其他两个工程引入的模块是不一样的:

springboot-eureka引入Eureka Server模块

在这里插入图片描述

其他两个工程引入

在这里插入图片描述
创建完成后,工程目录如下:

在这里插入图片描述

3. 配置注册中心eureka

我们先配置好eureka注册中心,在springboot-eureka下创建一个yml配置文件,在配置文件中配置如下内容:

server:
  port: 8080

eureka:
  instance:
    hostname: springboot-eureka  # eureka实例的主机名
  client:
    register-with-eureka: false #不把自己注册到eureka上
    fetch-registry: false #不从eureka上来获取服务的注册信息
    service-url:
      defaultZone: http://localhost:8080/eureka/  #指定注册中心的地址

注意,如果在项目中发现不能使用eukare的注解和对应的配置属性,排除依赖引入的错误以后,要看一下版本是否正确,也就是pom文件中的版本,如下:

<dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <!--如果版本导入错误,会出现找不到eureka注解的情况-->
                <version>Finchley.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

其次在启动类中添加注解@EnableEurekaServer表示开启注册服务

@EnableEurekaServer//开启eukare注册服务
@SpringBootApplication
public class SpringbootEurekaApplication {

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

启动该项目,浏览器访问http://localhost:8080/,可以看到eureka的web页面:

在这里插入图片描述

以后我们注册的服务会在application这个模块显示出来.

4. 编写服务提供者和服务消费者
  • 配置并编写provider-order

    首先在配置文件中配置对应的信息:

    server:
      port: 8082
    spring:
      application:
        name: provider-order  #指定发布服务的服务名
    eureka:
      instance:
        prefer-ip-address: true # 注册服务的时候使用服务的ip地址
      client:
        service-url:
          defaultZone: http://localhost:8080/eureka/ #配置注册中心的地址
    

    编写一个服务类:

    @Service
    public class OrderService {
        public String queryOrder() {
            return "查询到了订单!";
        }
    }
    

    编写对应的controller(因为SpringCloudEureka基于轻量的http协议,因此只需要编写controller即可)

    @RestController
    public class OrderController {
    
        @Autowired
        private OrderService orderService;
    
        @GetMapping("/order")
        public String queryOrder() {
            return orderService.queryOrder();
        }
    }
    

    启动该工程,我们可以在eureka的控制页面看到服务已经注册到了注册中心:

    在这里插入图片描述

  • 编写consumer-user工程

    先来配置一下:

    spring:
      application:
        name: consumer-user
    server:
      port: 8083
    
    eureka:
      instance:
        prefer-ip-address: true # 注册服务的时候使用服务的ip地址
      client:
        service-url:
          defaultZone: http://localhost:8080/eureka/
    

    接下来我们需要在启动类中开启服务发现且给容器中注入一个RestTemplate来调用服务.RestTemplate是SpringBoot为我们提供的简洁的http调用客户端,我们可以使用它很方便的调用我们发布的服务:

    @EnableDiscoveryClient//开启服务发现
    @SpringBootApplication
    public class ConsumerUserApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(ConsumerUserApplication.class, args);
        }
    
        @LoadBalanced//开启负载均衡,如果有多个相同服务的实例,会轮询调用,实现负载均衡
        @Bean
        public RestTemplate restTemplate() {
            return new RestTemplate();
        }
    }
    

    我们在controller层编写对应的方法:

    @RestController
    public class UserController {
    
        /**
         * restTemplate可以发送http请求
         */
        @Autowired
        private RestTemplate restTemplate;
    
        @GetMapping("/user")
        public String queryOrder() {
            System.out.println("开始调用服务!");
            //getForObjec方法中,第一个参数代表要调用的服务的地址,格式为:http://服务名/对应服务的url
            //第二个参数为该服务返回的数据类型,在这里是String类型.
            String str = restTemplate.getForObject("http://PROVIDER-ORDER/order", String.class);
            return str;
        }
    }
    

    启动该项目,我们可以在eureka的web页面看到已经注册上去了.

  • 启动项目,测试服务调用

    编写完所有的东西以后,我们启动三个项目,注意在本机上启动时端口号不能一直.下面是调用结果:

    在这里插入图片描述

    可以看到服务调用成功

总结

SpringCloud的简单实用就说到这里,在这里,我们实现类简单的分布式服务间的调用,可以看到,SpringCloud服务的调用方式还是很简单的,我们只需要简单的配置好注册中心的地址,就可以很方便的进行服务的对外发布.

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值