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

本文详细介绍如何使用SpringCloud和SpringBoot搭建微服务架构,包括服务注册与发现、负载均衡等关键技术实现步骤。

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

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

正文:

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

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

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

<?xml version="1.0" encoding="UTF-8"?>
<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.sun</groupId>
<artifactId>eureka-server</artifactId>
<version>1.0.0</version>
<packaging>jar</packaging>


<name>eureka-server</name>
<description>Spring Cloud project</description>


<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.3.5.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>


<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>1.8</java.version>
</properties>


<dependencies>


<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>


<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka-server</artifactId>
</dependency>


</dependencies>


<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Brixton.RELEASE</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>

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


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


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


第二步:创建服务提供方

pom.xml:

<?xml version="1.0" encoding="UTF-8"?>
<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.sun</groupId>
<artifactId>spring-cloud-compute-service</artifactId>
<version>1.0.0</version>
<packaging>jar</packaging>


<name>compute-service</name>
<description>Spring Cloud project</description>


<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.3.5.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>


<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>1.8</java.version>
</properties>


<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</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>Brixton.RELEASE</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>

2:写一个测试注册方


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


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


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


第三步:创建消费者

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

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

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

编写消费者:pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<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.sun</groupId>
<artifactId>eureka-ribbon</artifactId>
<version>1.0.0</version>
<packaging>jar</packaging>


<name>eureka-ribbon</name>
<description>Spring Cloud project</description>


<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.3.5.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>


<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>1.8</java.version>
</properties>


<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-ribbon</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</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>Brixton.RELEASE</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>
2.启动类中

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


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


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


当我们启动项目并访问两次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/

就实现了注册中心的集群
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值