Spring Cloud — 服务注册与发现

原创 2018年04月15日 17:13:20

前言

        用过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的工程来相互注册就好了。集群的模式在以后的博客中再介绍。

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

Spring cloud服务的注册和发现

Spring cloud服务的注册和发现   可参考:http://blog.csdn.net/liaomin416100569/article/details/78059174 服务(serv...
  • XCL18215166914
  • XCL18215166914
  • 2018-01-07 19:45:50
  • 405

Spring cloud实现服务注册及发现

服务注册与发现对于微服务系统来说非常重要。有了服务发现与注册,你就不需要整天改服务调用的配置文件了,你只需要使用服务的标识符,就可以访问到服务。   本文属于《7天学会spring cloud系...
  • u011955252
  • u011955252
  • 2016-11-20 17:08:57
  • 1758

Spring cloud 服务注册与发现

  • 2018年04月12日 23:19
  • 228KB
  • 下载

03.Spring Cloud学习笔记之服务注册与服务发现组件Eureka

前言从本篇博客开始将正式进入Spring Cloud的实战部分,因为博主用了很长时间的Dubbo,发现Spring Cloud和Dubbo有很多相似之处,所以可能在博客中提及进行类比,如果没有接触过D...
  • RobertoHuang
  • RobertoHuang
  • 2017-08-28 23:40:08
  • 760

学习Spring Cloud第四课(服务注册与服务发现)

一、如何解决硬编码问题              上节课我们一起学习了服务提供者和服务发现者,其中有个非常大问题就是硬编码的问题,众所周知,在现在互联网开发中,访问地址的IP和端口号是动态的,一个服...
  • u012453843
  • u012453843
  • 2017-02-18 13:13:54
  • 1074

SpringCloud教程一:服务注册与发现(Eureka)

Spring Cloud Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智能路由,微代理,控制总线)。分布式系统的协调导致了样板模式...
  • wang_shuyu
  • wang_shuyu
  • 2017-12-01 12:18:08
  • 797

Spring Cloud 之服务注册&发现

包括服务注册中心,服务提供方(注册服务),服务使用方(调用服务) 注册中心: 1. 使用spring-cloud-starter-eureka-server,主类中使用@EnableEureka...
  • jixuju
  • jixuju
  • 2017-03-19 00:10:01
  • 393

SpringCloud 服务注册与服务发现

架构 (引用Dubbo的架构:http://dubbo.io/User+Guide-zh.htm)节点角色说明:Provider: 暴露服务的服务提供方。 Consumer: 调用远程服务的服务...
  • w_x_z_
  • w_x_z_
  • 2016-11-16 22:46:04
  • 2398

SpringCloud——Eureka服务注册和发现

一、SpringCloud和Dubbo二、Demo今天介绍的服务发现是在SpringCloud的子项目Netflix中,除此之外,他还提供了熔断器、负载均衡、智能路由等,之后会介绍到。和往常一样,我们...
  • u010066934
  • u010066934
  • 2017-01-18 15:00:11
  • 37989

springcloud eurake (服务注册与发现)

springcloud eurake
  • u011196623
  • u011196623
  • 2017-04-24 13:46:52
  • 898
收藏助手
不良信息举报
您举报文章:Spring Cloud — 服务注册与发现
举报原因:
原因补充:

(最多只允许输入30个字)