最近学习spring cloud,boot+cloud的形式用起来挺不错的,学习过程中试着搭建了一个完整的分布式微服务结构,这个结构由以下组件组成组成

  • eureka server:注册中心
  • config server:配置中心
  • gateway:网关
  • service:服务

spring cloud服务的注册与发现的理论网上一大堆,推荐几篇不错的系列博客

这些博客的写得相当不错,我学习的时候也大多参考这些博客,不过上面博客中的一些例子用的版本相对较老,这里贴出我使用的版本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<dependencyManagement>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Dalston.SR4</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>1.5.7.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencyManagement>

注册中心服务端

引入依赖

1
2
3
4
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka-server</artifactId>
</dependency>

配置文件application.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
server:
port: ${port:8082}
tomcat:
uri-encoding: UTF-8
spring:
application:
name: eureka
eureka:
instance:
hostname: localhost
server:
enable-self-preservation: false
eviction-interval-timer-in-ms: 10000
client:
registerWithEureka: false
fetchRegistry: false
serviceUrl:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

在主类上添加注解

1
2
3
4
5
6
7
8
@SpringBootApplication
@EnableEurekaServer
public class ApplicationEureka {
public static void main(String[] args){
SpringApplication app = new SpringApplication(ApplicationEureka.class);
app.run(args);
}
}

注册中心的服务端就写完了,几乎就是一个空工程,这也得益于spring boot强大的自动配置。

注册中心客户端
添加依赖

1
2
3
4
5
6
7
8
<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>

配置文件application.yml

1
2
3
4
5
6
spring:
application:
name: sample
client:
serviceUrl:
defaultZone: http://localhost:8082/eureka/

在主类上添加@EnableEurekaClient注解

1
2
3
4
5
6
7
8
@SpringBootApplication
@EnableEurekaClient
public class ApplicationClient {
public static void main(String[] args){
SpringApplication app = new SpringApplication(ApplicationClient.class);
app.run(args);
}
}

分别启动eureka server和client,打开localhost:8082,即eureka server的网址,就可以看到名为sample的服务已经注册在注册中心了。