Spring Cloud 全家桶系列 ——1.服务中心Spring Cloud Eureka

本文介绍如何使用Spring Cloud Eureka和Ribbon快速构建分布式服务结构。通过三个步骤:创建项目并添加依赖,为主类添加注解,编写配置,实现服务中心、服务注册与服务消费。重点讲解服务治理、负载均衡及服务间解耦。
摘要由CSDN通过智能技术生成

目标

本文的目标是使用spring cloud eureka和spring cloud ribbon快速构建一个简易的分布式结构例子。

  • spring cloud eureka
    微服务的关键就是把服务切分成比较小且独立的服务,这样做的好处最大的好处就是服务之间的解耦。但也带来很多问题,其中首当其冲的就是服务间的互相调用将会极大的增多。如果不对其加以管理,将会变得非常复杂。而spring cloud Eureka就是为了服务的治理而生的。
  • spring cloud Ribbon
    服务中心和服务注册只需要eureka就可完成,而Ribbon者提供了服务消费的功能。
    Ribbon另一个重要的功能是提供客户端负载均衡的作用。

步骤

我们很快就会发现,使用这些组件都非常简单。一般三个步骤就能完成。

  • 创建项目添加依赖
    强烈推荐使用Intellij IDEA中的Spring Initializr来构建Spring Cloud工程,IDEA会自动帮你编写好pom。
  • 为主类添加注解
  • 编写必要的配置

快速构建服务中心

新建项目添加依赖

  • 使用Idea创建一个新项目
  • 在选择组件时,勾选Cloud Discovery中的Eureka Server
    在这里插入图片描述
  • 在创建好项目之后,我们看下pom.xml文件,这个文件写明了项目依赖的组件,其中我们看到关键的依赖“spring-cloud-starter-netflix-eureka-server”
<dependencies>
	 <dependency>
		<groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
      </dependency>
 </dependencies>

这里需要注意的是,如果我们使用的spring boot的版本大于2.0,依赖包的名称中似乎多了一个“netflix”,这个是开源公司的名称。这就是为什么推荐使用Spring Initializr来构建项目,如果你看网上的其他教程,直接手动引入“spring-cloud-starter-eureka-server”,你会发现死活编译不通过。

主类注解

主类添加注解非常简单,直接在主类添加一个 @EnableEurekaServer 就可以。
在这里插入图片描述

必要配置

配置文件是application.properties(注意,有另一种配置文件.yml,效果是一样的,但是格式不一样)

# 每一个服务都需要的名称
spring.application.name=eureka-server
# 每一个服务都需要的端口
server.port=1111

eureka.instance.hostname=localhost
#禁止eureka注册自己,否则会报错,这个在构建多个服务中心时会用到,限制先禁止
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false

设置完成后直接启动就可以了。我们访问 localhost:1111 应该就能看到服务中心的界面了。其中红圈的部分就是注册到上面的服务。由于你并没有注册服务,红圈的部分应该是空的。
在这里插入图片描述

服务注册

现在,我们就开始把服务注册到服务中心,还是那三个步骤

新建项目添加依赖

选中Cloud Discovery中的Eureka Discovery。在这里插入图片描述
由于需要提供服务,所以还需要一个Api接口,所以还需要引入Web组件
在这里插入图片描述

查看pom.xml文件,发现其中Eureka客户端依赖“spring-cloud-starter-netflix-eureka-client”
以及web依赖“spring-boot-starter-web”

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

主类注解

主类添加注解 @EnableDiscoveryClient
在这里插入图片描述

配置

# 名称
spring.application.name=server-provide
# 端口
server.port=2001

# 服务注册的地址
eureka.client.service-url.defaultZone=http://127.0.0.1:1111/eureka/

提供服务接口

由于我们需要测试,我们还需要另外提供一个接口。
新建一个class,并添加@RestController注解和@RequestMapping("/")注解。这样,我们就可以通过localhost:2001/HoHoHo 访问得到内容。

@RestController
public class CommonServices {
    @RequestMapping("/HoHoHo")
    public String GetHoHoHo(){
        return "HoHoHo";
    }
}

启动项目,重新打开服务中心,应该能看到多了红圈中的内容。这表示注册成功了。
在这里插入图片描述

服务发现和消费

现在,以及注册好服务了,可以消费该服务了。

新建项目添加依赖

新建项目,除了和服务提供者医院添加Eureka Client 和web依赖,还需要添加Ribbon依赖,用来消费服务。
一般情况下,服务都既是服务提供者,也是服务消费者。
在这里插入图片描述
pom.xml的关键依赖

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

主类注解

添加注解
Eureka需要添加注解@EnableDiscoveryClient
Ribbon不需要添加注解,但是需要配置一下,在主类增加一下代码

	@Bean
	@LoadBalanced
	public RestTemplate restTemplate() {
		return new RestTemplate();
	}

配置

spring.application.name=server-common
server.port= 5001

eureka.client.serviceUrl.defaultZone=http://127.0.0.1:1111/eureka/

消费服务

@RestController
public class HoController {

	//将主类配置的RestTemplate 自动注入到此处
    @Autowired
    RestTemplate restTemplate;

    @GetMapping("/Ho")
    public String HoHoHo() {
    	//通过getForObject去访问对应的服务,这里的server-provide就是在服务提供者注册时配置的服务名称
        return restTemplate.getForObject("http://server-provide/HoHoHo", String.class);
    }

}

启动

现在我们启动该项目
访问 localhost:5001/Ho,就能够访问到localhost:2001/HoHoHo 接口中的内容。

总结

我们发现,在编写服务消费者的代码时,并不关心服务提供者具体的Ip地址和端口,这样就能够把服务提供者和服务消费者给解耦出来。再加上Ribbon负载均衡,我们就可以轻松的进行服务的拓容。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值