Spring Cloud -- 1 服务注册中心,服务注册与发现

      Spring Cloud利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,给开发者留出一套简单易懂、易部署和易维护的分布式系统开发工具包。

   “微服务架构”在这几年非常的火热,什么是“微服务架构”呢?简单的说,微服务架构就是将一个完整的应用从数据存储开始垂直拆分成多个不同的服务,每个服务都能独立部署、独立维护、独立扩展,服务与服务间通过诸如RESTful API的方式互相调用。

正文:

    服务注册与发现用到了Spring Cloud Netflix。   Spring Cloud Netflix通过自动配置集成到Spring Boot应用中,用几个简单的注解可以快速启用和配置您的应用程序来构建大型分布式系统。提供包括服务发现、断路器、智能路由和客户端负载均衡等。Spring Cloud Netflix使用Eureka服务器来注册/发现服务建立SpringBoot应用程序 。

第一步:创建服务注册中心

   创建一个spring boot 工程,pom.xml中引入:


xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0


com.sun
eureka-server
1.0.0
jar


eureka-server
Spring Cloud project



org.springframework.boot
spring-boot-starter-parent
1.3.5.RELEASE





UTF-8
1.8







org.springframework.boot
spring-boot-starter-test
test




org.springframework.cloud
spring-cloud-starter-eureka-server









org.springframework.cloud
spring-cloud-dependencies
Brixton.RELEASE
pom
import







org.springframework.boot
spring-boot-maven-plugin






2.启动方法加上@EnableEurekaServer注解启动一个服务注册中心提供给其他应用进行对话

Spring Cloud -- 1 服务注册中心,服务注册与发现_第1张图片

3.在默认设置下,该服务注册中心也会将自己作为客户端来尝试注册它自己,所以我们需要禁用它的客户端注册行为,只需要在application.properties中配置:

Spring Cloud -- 1 服务注册中心,服务注册与发现_第2张图片

这样我们的注册中心就好了,启动工程访问:http://localhost:1111/可以看到如下画面没有任何服务

Spring Cloud -- 1 服务注册中心,服务注册与发现_第3张图片

第二步:创建服务提供方

pom.xml:


xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0


com.sun
spring-cloud-compute-service
1.0.0
jar


compute-service
Spring Cloud project



org.springframework.boot
spring-boot-starter-parent
1.3.5.RELEASE





UTF-8
1.8





org.springframework.cloud
spring-cloud-starter-eureka




org.springframework.boot
spring-boot-starter-test
test









org.springframework.cloud
spring-cloud-dependencies
Brixton.RELEASE
pom
import








org.springframework.boot
spring-boot-maven-plugin





2:写一个测试注册方

Spring Cloud -- 1 服务注册中心,服务注册与发现_第4张图片

3.启动类加上@EnableDiscoveryClient注解,该注解能激活Eureka中的DiscoveryClient实现,才能实现Controller中对服务信息的输出。

Spring Cloud -- 1 服务注册中心,服务注册与发现_第5张图片

4.application.properties配置,制定注册中心位置,名称也很重要,在后面调用服务的时候要用到,其次端口号不能重复

Spring Cloud -- 1 服务注册中心,服务注册与发现_第6张图片

启动该工程后,再次访问:http://localhost:1111/,就可以看到我们定义的服务被注册了名称为SPRING-CLOUD-COMPUTE-SERVICE

Spring Cloud -- 1 服务注册中心,服务注册与发现_第7张图片

第三步:创建消费者

这里要介绍一下Ribbon,Ribbon是一个基于HTTP和TCP客户端的负载均衡器,Ribbon可以在通过客户端中配置的ribbonServerList服务端列表去轮询访问以达到均衡负载的作用,可以与Eureka联合使用。

当有多个服务提供方的时候Ribbon可以实现负载均衡。

所以我们修改spring-cloud-compute-service中的server-port为2225,再启动一个服务提供方:compute-service,这时候我们可以从http://localhost:1111/看到名字一样,端口不一样的两个服务提供方。

编写消费者:pom.xml


xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0


com.sun
eureka-ribbon
1.0.0
jar


eureka-ribbon
Spring Cloud project



org.springframework.boot
spring-boot-starter-parent
1.3.5.RELEASE





UTF-8
1.8





org.springframework.cloud
spring-cloud-starter-ribbon


org.springframework.cloud
spring-cloud-starter-eureka


org.springframework.boot
spring-boot-starter-web




org.springframework.boot
spring-boot-starter-test
test







org.springframework.cloud
spring-cloud-dependencies
Brixton.RELEASE
pom
import








org.springframework.boot
spring-boot-maven-plugin





2.启动类中

通过@EnableDiscoveryClient注解来添加发现服务能力。创建RestTemplate实例,并通过@LoadBalanced注解开启均衡负载能力。

Spring Cloud -- 1 服务注册中心,服务注册与发现_第8张图片

3.创建ConsumerController来消费SPRING-CLOUD-COMPUTE-SERVICE的test服务。

Spring Cloud -- 1 服务注册中心,服务注册与发现_第9张图片

4.application.properties中配置eureka服务注册中心

Spring Cloud -- 1 服务注册中心,服务注册与发现_第10张图片

当我们启动项目并访问两次http://localhost:3333/test会发现端口2222和2225服务端被分别调用了一次服务,这样就实现了负载均衡。



我们一个简单的服务注册中心,提供与消费的demo就写好了!


番外篇:注册中心的高可用性

我们可以集群多个注册中心,创建两个注册中心项目。

创建application-peer1.properties,作为peer1服务中心的配置,并将serviceUrl指向peer2

spring.application.name=eureka-server
server.port=1111
eureka.instance.hostname=peer1

eureka.client.serviceUrl.defaultZone=http://peer2:1112/eureka/

      创建application-peer2.properties,作为peer2服务中心的配置,并将serviceUrl指向peer1

spring.application.name=eureka-server
server.port=1112
eureka.instance.hostname=peer2

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

在/etc/hosts文件中添加对peer1和peer2的转换

127.0.0.1 peer1
127.0.0.1 peer2

通过spring.profiles.active属性来分别启动peer1和peer2

java -jar eureka-server-1.0.0.jar --spring.profiles.active=peer1
java -jar eureka-server-1.0.0.jar --spring.profiles.active=peer2

在服务注册与发现中eureka.client.serviceUrl.defaultZone配置为:

eureka.client.serviceUrl.defaultZone=http://peer1:1111/eureka/,http://peer2:1112/eureka/

就实现了注册中心的集群

你可能感兴趣的:(Spring,Boot)