Spring Cloud:第二章:eureka 服务发现
想要实现一个服务注册中心的功能非常简单,只需要在项目的启动类 EurekaServerApplication 上使用 @EnableEurekaServer 注解即可
1 @EnableEurekaServer
2 @SpringBootApplication
3 public class EurekaServerApplication{
4
5 public static void main(String[] args) {
6 new SpringApplicationBuilder(EurekaServerApplicatio
n.class)
7 .web(true).run(args);
8 }
9 }
默认情况下,该服务注册中心也会将自己作为客户端来尝试注册它自己,所以我们需要禁用它的客户端注册行为,只需要在 application.properties 配置文件中增加如下信息:
1 spring.application.name=eureka-server
2 server.port=1001
3 eureka.instance.hostname=localhost
4 eureka.client.register-with-eureka=false
5 eureka.client.fetch-registry=false
启动 EurekaServerApplication,访问 http://localhost:9001/可以看到 Eureka 的页面,从红框的位置可以看到没有任务服务实例注册到当前的服务注册中心
服务提供方 :eureka-client
每一个实例注册之后需要向注册中心发送心跳,当 client 向 server 注册时,它会提供一些元数据,例如主机和端口,URL,主页等。Eureka server 从每个 client 实例接收心跳消息。 如果心跳超时,则通常将该实例从注册 server 中删除。
新建一个 springboot 项目:eureka-client,其 pom.xml 配置如下:
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<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-web</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Dalston.SR1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
想要实现一个服务提供方也很简单,只要在项目的启动类 EurekaClientApplication 上使用 @EnableEurekaClient 注解即可
1 @EnableEurekaClient
2 @SpringBootApplication
3 public class EurekaClientApplication {
4
5 public static void main(String[] args) {
6 new SpringApplicationBuilder(
7 EurekaClientApplication.class)
8 .web(true).run(args);
9 }
10 }
在 application.properties 中进行如下配置
spring.application.name=eureka-client
server.port=9002
eureka.client.serviceUrl.defaultZone=http://localhost:9001/eureka/
通过spring.application.name
属性,我们可以指定微服务的名称后续在调用的时候只需要使用该名称就可以进行服务的访问。
eureka.client.serviceUrl.defaultZone
属性对应服务注册中心的配置内容,指定服务注册中心的位置。
使用server.port
属性设置不同的端口。
启动 EurekaClientApplication 类
刷新 http://localhost:9001/,可以看到咱们的服务提供方已经注册到了服务注册中心
在新建一个 DiscoveryController
使用 discoveryClient.getServices()获取已经注册的服务名,使用 @value 将配置文件中的信息赋值到 ip
@RestController
public class DiscoveryController {
@Autowired
private DiscoveryClient discoveryClient;
@Value("${server.port}")
private String ip;
评论