Spring Cloud学习笔记——搭建注册中心

服务治理

服务治理是微服务中最核心和最基础的模块,用于各个微服务的注册和发现功能。在系统发展的初期可能由于模块不多,完全可以通过一些静态配置文件保存各个服务的地址,在各个项目中手工维护一份服务的实例清单。其实技术没有好与坏之分,只有适合与不适合,如果你的公司规模不大,拆分的服务项目一只手就数的过来,那为了顺应微服务的潮流而引入了一套spring cloud完全是加重项目负担,没有任何实际意义。但是相反,如果公司规模越来越大,拆分的服务越来越多,系统功能逐渐复杂,继续采用静态配置的方式就会非常难以维护,而且万一某个服务需要迁移或者变动,会产生牵一发而动全身的效果,相应的调用方都需要修改配置,所以遵从计算机领域真理,没有什么是加一个中间层不能解决的,注册中心这样的模块应运而生。

  • 服务注册
    服务治理框架中通常都会有一个注册中心,各个服务端像注册中心登记自己以及提供的服务,包括主机、端口号、版本号甚至服务协议等信息,由注册中心来维护各个服务实例的实例清单。另外注册中心还会通过心跳的方式检测实例健康程度,在实例不可用后会将实例剔除。
  • 服务发现
    相应的服务调用的时候肯定不会再是直接进行实例调用,而是会通过服务名称的方式向注册中心发出请求,获取实例清单以进行调用或访问

搭建服务注册中心

Spring Cloud Eureka,使用Netfilx Eureka来实现服务的注册与发现,Spring Cloud项目是基于Spring Boot项目搭建的,网上有非常多关于搭建SpringBoot项目的相关的而且使用非常简单,这里不再赘述,我使用的项目管理工具的gradle,在build.gradle文件中加入如下代码:

plugins {
	id 'org.springframework.boot' version '2.1.3.RELEASE'
	id 'java'
}

apply plugin: 'io.spring.dependency-management'

group = 'org.zyc.springcloud'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'


repositories {
	maven{ url 'http://maven.aliyun.com/nexus/content/groups/public/' }
	maven{ url 'http://maven.aliyun.com/nexus/content/repositories/jcenter'}
}

ext {
	set('springCloudVersion', 'Greenwich.RELEASE')
}

dependencies {
	implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-server'
	testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

启动一个服务注册中心页非常简单,可以通过@EnableEurekaServer注解启动,在SpringBoot启动类中加入这个注解即可

@EnableEurekaServer
@SpringBootApplication
public class EurekaServerApplication {

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

}

在默认设置中,服务注册中心会把自身作为客户端来尝试注册自己,可以通过配置项进行配置,同时为了区分后续可能启动的其他服务注册中心,这里通过设置端口号的方式进行区分,在项目的application.properties中设置即可,为了便于区分不同环境的配置,我们这里新建一个application-peer1.properties,作为第一个配置中心的配置文件

spring:
  application:
    name: eureka-server
server:
  port: 1111
eureka:
  instance:
    hostname: peer1

配置完成后启动SpringBoot项目即可,注意启动时加入启动应用参数–spring.profiles.active=peer1,用于区分使用配置文件,此时http://localhost:1111 即可访问服务注册中心

注册服务提供者

既然服务注册中心搭建完成,但是空有一个注册中心毫无意义,重要的是提供服务,所以我们现在可以尝试像注册中心注册一个服务的提供者,依旧类似于之前的方式生成一个SpringBoot项目,我们新建一个hello-service项目当作服务的提供者,build.gradle文件中稍作修改,加入如下依赖

implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client'

为了测试服务提供效果,我们简单的写一个HelloController,通过接口返回一个hello字符串即可

@RestController
public class HelloController {
    private final Logger logger = LoggerFactory.getLogger(getClass());

    @Autowired
    private DiscoveryClient client;


    @RequestMapping(value = "/hello", method = RequestMethod.GET)
    public String hello() {
        return "Hello World";
    }
}

马上就要大功告成了,最后在启动类加上注解@EnableDiscoveryClient,这样代码我们就完成了,但是到这里还不够,既然是要将服务提供者注册到服务注册中心,那么首先肯定要让提供者知道像哪里注册,所以还需要在application.properties中配置一下注册中心的url

server.port=2222
spring.application.name=hello-service
eureka.client.service-url.defaultZone = http://peer1:1111/eureka/

这里我们指定了端口号为2222,服务名字为hello-service以及刚刚搭建的eureka,这里完成后我们可以启动一下hello-service项目,在启动日志中应该可以看到如下信息,说明我们的服务已经注册成功了,同时在刚刚的eureka管理页面http://localhost:1111 中Instances currently registered with Eureka一栏中应该可以看到我们hello-service的注册信息了

DiscoveryClient_HELLO-SERVICE/192.168.56.1:hello-service:2222: registering service...
DiscoveryClient_HELLO-SERVICE/192.168.56.1:hello-service:2222 - registration status: 204
Tomcat started on port(s): 2222 (http) with context path ''
Updating port to 2222
Started HelloServiceApplication in 6.352 seconds (JVM running for 16.223)

通过访问http://localhost:2222/hello 可以看到返回了hello world,那么至此,我们就拥有了一个服务注册中心和一个注册的服务,可以说,一个最简单微服务系统已经搭建了

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值