服务注册与发现
由于Spring Cloud为服务治理做了一层抽象接口,所以在Spring Cloud应用中可以支持多种不同的服务治理框架,比如:Netflix Eureka、Consul、Zookeeper。在Spring Cloud服务治理抽象层的作用下,我们可以无缝地切换服务治理实现,并且不影响任何其他的服务注册、服务发现、服务调用等逻辑。
Spring Cloud Eureka是Spring Cloud Netflix项目下的服务治理模块。而Spring Cloud Netflix项目是Spring Cloud的子项目之一,主要内容是对Netflix公司一系列开源产品的包装,它为Spring Boot应用提供了自配置的Netflix OSS整合。通过一些简单的注解,开发者就可以快速的在应用中配置一下常用模块并构建庞大的分布式系统。它主要提供的模块包括:服务发现(Eureka),断路器(Hystrix),智能路由(Zuul),客户端负载均衡(Ribbon)等。
Springcloud庞大的分布式系统:
服务发现与注册(Eureka)
- 断路器(Hystrix)
- 智能路有,服务网关(Zuul)
- 客户端负载均衡(Ribbon)
- 分布式配置中心(config)
- 消息总线(Bus)
- 安全框架(Security)
- 调度中心(Zookeeper)
本篇介绍如何使用spring-cloud-starter-eureka-server来搭建Spring Cloud服务注册与发现模块。
创建服务注册中心(springcloud-eureka-server)
创建一个提供服务的客户端,并向服务注册中心注册自己。
创建springboot项目
添加依赖
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.9.RELEASE</version>
<relativePath />
</parent>
<modelVersion>4.0.0</modelVersion>
<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>Edgware.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
创建入口类
@EnableEurekaServer
@SpringBootApplication
public class SpringCloudEurekaServerApplication {
public static void main(String[] args) {
new SpringApplicationBuilder(SpringCloudEurekaServerApplication.class).web(true).run(args);
}
}
创建配置文件
新建application.yml
server:
port: 8000
eureka:
instance:
hostname: localhost
client:
registerWithEureka: false
fetchRegistry: false
serviceUrl:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
为了与后续要进行注册的服务区分,这里将服务注册中心的端口通过server.port属性设置为8000。
启动入口类,可以发现如下界面
目前没有注册任何应用
创建服务提供方
添加依赖
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.9.RELEASE</version>
<relativePath />
</parent>
<modelVersion>4.0.0</modelVersion>
<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>Edgware.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
创建入口类
使用EnableEurekaClient注解。
@SpringBootApplication
@EnableDiscoveryClient
public class SpringCloudServiceRestApplication {
public static void main(String[] args) {
SpringApplication.run(SpringCloudServiceRestApplication.class,args) ;
}
}
创建配置文件
新建application.yml
server:
port: 8001
spring:
application:
name: springcloud-service-rest
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8000/eureka/
创建restful接口
@RestController
@RequestMapping(value = "/api/rest")
public class RestfulController {
@Autowired private RestTemplate restTemplate ;
@Value("${server.port}")
String port ;
@Value("${spring.application.name}")
String name ;
@GetMapping(value = "/info")
public String getInfo(){
return "I am info from port("+port+") from application name("+name+")" ;
}
}
启动项目
启动入口类项目,发现如下截图
访问服务,截图如下
源码
源码可能在后面的文章中会复用,有部分修改,按照博客操作就行,不是很难的东西