SpringCloud学习之【Eureka实现服务注册与发现】
这段时间开始整理之前的SpringCloud实践笔记,这里感谢翟永超大佬的文章SpringCloud从入门到精通的指导。
项目结构
服务注册中心
注意:
1、SpringCloud与SpringBoot有比较严格的版本对应关系,使用之前请确定好对应相关版本
2、如果没有特殊需要,建议各子模块使用各自独立的依赖,而不同一使用父模块的pom依赖。不然可能出现冲突问题
3、本篇文章主要介绍项目的搭建,关于Eureka服务的注册与发现相关理论知识,可移步Eureka服务注册与发现
首先先创建一个SpringBoot工程,再创建一个名为eureka-server的子模块工程,并在pom.xml中引入Eureka服务注册中心所需依赖,如下:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.4.RELEASE</version>
<relativePath/>
</parent>
<dependencies>
<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>Dalston.SR1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
通过@EnableEurekaServer注解就能启动一个服务注册中心
@EnableEurekaServer
@SpringBootApplication
public class EurekaServerApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaServerApplication.class, args);
}
}
application.properties配置示例如下:
spring.application.name=eureka-server
server.port=6601
eureka.instance.hostname=localhost
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
默认设置下,该服务注册中心也会将自己作为客户端来尝试注册它自己,所以我们需要通过
eureka.client.register-with-eureka=false
禁用它的客户端注册行为
启动工程后,访问:http://localhost:6601/ ,可看到页面如下图所示:
注册中心就开始运行了,可以看到目前还没有微服务实例注册
服务提供者
下面我们创建提供服务的客户端,并向服务注册中心注册自己。本文我们主要介绍服务的注册与发现,所以我们不妨在服务提供方中尝试着提供一个接口来获取当前所有的服务信息。
首先,创建一个命名为eureka-clientSpring Boot应用,结构如下:
pom.xml如下配置:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.4.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<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>
其次,实现/dc请求处理接口,通过DiscoveryClient对象,在日志中打印出服务实例的相关内容。
@RestController
public class DcController {
@Autowired
DiscoveryClient discoveryClient;
@GetMapping("/dc")
public String dc() throws InterruptedException{
// Thread.sleep(5000L);
String services = "Services: " + discoveryClient.getServices();
System.out.println(services);
return services;
}
}
应用主类中通过加上@EnableDiscoveryClient注解,该注解能激活Eureka中的DiscoveryClient实现,这样才能实现Controller中对服务信息的输出。
我们在完成了服务内容的实现之后,再继续对application.properties做一些配置工作,具体如下:
spring.application.name=eureka-client
server.port=6602
eureka.client.serviceUrl.defaultZone=http://localhost:6601/eureka/
- spring.application.name:可以指定微服务的名称
- eureka.client.serviceUrl.defaultZone:对应服务注册中心的配置内容,指定服务注册中心的位置
- server.port:设置不同的端口。
启动该工程后,再次访问:http://localhost:6601/。 可以看到我们定义的服务被成功注册了。
当然,我们也可以通过直接访问eureka-client服务提供的/dc接口来获取当前的服务清单,只需要访问:http://localhost:6602/dc, 我们可以得到如下输出返回:
Services: [eureka-client]