Spring Cloud Netflix — 服务注册与发现

版权声明:本文为博主原创文章,未经博主允许不得转载,装载请注明出处。 https://blog.csdn.net/u013038861/article/details/79949496

前言

        用过dubbo的朋友们都清楚,它作为一个分布式管理框架,大体可以分为三个部分:服务注册中心,服务生产者和服务消费者。Spring Cloud作为一站式分布式框架,自然也提供了相应的组件,来完成服务注册与发现的过程。没有用过分布式管理框架的同学,可以简单这么着理解:上篇说道微服务将以往的工程拆成了多个服务组件,服务组件之间调用管理的框架就是分布式框架。分布式管理框架可以使用服务名的方式来调用其他微服务,而不用显示的配置http调用地址即可实现。

                     

        Spring Cloud封装了Netflix,形成了自己相关的系列组件,下面以Eureka为例,介绍服务注册与发现的过程。以下过程中创建的项目,均基于spring boot,IDE为idea,JDK版本为1.8

服务注册中心

        Eureka的服务注册中心需要搭建一个Eureka Server,用idea创建一个spring boot项目:File New Project --> Spring Initializr --> 输入创建的项目名称等信息 --> 勾选Eureka Server,这样一个Eureka Server项目就创建成功了,如下图所示:




创建成功后,可以看到项目自动添加了一些引用,如下所示:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>

	<groupId>com.von</groupId>
	<artifactId>eurekaserver-8761</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>jar</packaging>

	<name>eurekaserver-8761</name>
	<description>Demo project for Spring Boot</description>

	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>1.5.9.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
		<java.version>1.8</java.version>
		<spring-cloud.version>Edgware.RELEASE</spring-cloud.version>
	</properties>
	<dependencies>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-eureka-server</artifactId>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
	</dependencies>
	<dependencyManagement>
		<dependencies>
			<dependency>
				<groupId>org.springframework.cloud</groupId>
				<artifactId>spring-cloud-dependencies</artifactId>
				<version>${spring-cloud.version}</version>
				<type>pom</type>
				<scope>import</scope>
			</dependency>
		</dependencies>
	</dependencyManagement>
	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>
</project>

        因为这个实例项目是之前创建的,所以使用的Spring boot的版本为1.0,目前如果直接从Spring官网上进行创建,Spring boot的版本会是2.0,和1.0之间有什么区别,还请读者自行查看。

        只要在项目启动类上添加注解:@EnableEurekaServer,即可代表当前工程将作为服务的注册中心。然后需要在配置文件中配置以下内容,这里使用的application.properties文件,用.yml文件配置同样好使:

## 当前项目端口号
server.port=8761

## Eureka server的地址
eureka.instance.hostname=localhost
## 下面两个配置代表自己不能注册自己
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false

        到此为止,Eureka Server就已经搭建完成了,启动项目即可访问到服务管理页面。在浏览器中输入地址:

http://localhost:8761/,如下图所示,因为目前还没有服务注册到服务中心上来,所以目前的服务实例是空的。

服务生产者

        服务注册中心部署完成之后,接下来就改创建服务生产者了,创建项目的过程和上述过程基本一样,只是在选择依赖时不再选择Eureka Server,而是要选择Eureka Discovery,如此就不赘述了。

        创建完成后,在启动类上加上注解@EnableEurekaClient,即代表当前服务作为一个Eureka的客户端,将注册到Eureka Server上来提供服务。application.properties配置文件的内容如下所示:

server.port=8762
# 服务注册中心的地址
eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka/
# 自己的服务名称,用于将来服务消费者调用
spring.application.name=eureka-producer-hello

启动该工程,再刷新服务注册中心的页面,即可发现已经有一个名为eurek-hello的服务注册好了,可以被其他服务来调用了。

注意:这里注册是以IP方式注册的,也可以使用域名注册。如果服务器hosts文件配置了域名,则默认会以域名方式注册。如果要使用IP注册,可以加上下面配置:

spring.cloud.client.ipAddress=192.168.*.*
eureka.instance.preferIpAddress=true
eureka.instance.instance-id=${spring.cloud.client.ipAddress}:${spring.application.name}:${server.port}


后语

        在使用Eureka时,要注意它相应的名称,一般将Eureka Server称为Eureka服务端,Eureka Client称为Eureka客户端,但Eureka客户端并不代表着它只是消费服务,同样的它也作为服务生产者为其他消费者提供服务。也就是说,在使用Spring Cloud Eureka时,服务消费者和服务生产者都要注册到注册中心,它们同属于Eureka客户端,既可以消费服务,也可以提供服务。

        另外,对于Eureka Server和Eureka Client,都可以搭建集群。对于Eureka Client来说,只需要将多个服务注册为同一个服务名,它们就自动形成了一个集群,当然这多个服务,提供的服务功能还是要一样的。对于Eureka Server来说,同样也可以形成集群的模式,只要创建多个Eureka Server的工程来相互注册就好了。集群的模式在以后的博客中再介绍。

阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页