标签:自定义 width blog 清单 返回 src 微服务 discovery type
服务治理可以说是微服务架构中最为核心和基础的模块,它主要用来实现各个微服务实例的自动化注册与发现。
在最初构建微服务系统的时候可能服务并不多,我们可以通过做一些静态配置来完成服务调用
此时看着一切都还正常。
随着项目逐渐接近尾声,维护人员需要维护的服务越来越多,越来越复杂,最终形成大量的配置文件,维护将会变得越来越困难。此时,微服务应用实例自动化管理框架变得至关重要。
Spring Cloud Eureka,使用Netflix Eureka来实现服务注册与发现,它既包含了服务端组件,也包含了客户端组件。
Eureka服务端,我们也称为服务注册中心,他同其他服务注册中心一样,支持高可用配置。它依托于强一致性提供良好的服务实例可用性,可以应对多种不同的故障场景。
如果Eureka以集群方式部署,当集群中有分片出现故障时,那么Eureka就转入自我保护模式。它允许在分片故障期间继续提供服务的发现和注册,当故障分片恢复运行时,集群中的其他分片会把它们的状态再次同步回来。
Eureka客户端,主要处理服务的注册与发现。客户端服务通过注解和参数配置的方式,嵌入在客户端应用程序的代码中,在应用程序运行时,Eureka客户端向注册中心注册自身提供的服务并周期性地发送心跳来更新它的服务租约。同时,他也能从服务端查询当前注册的服务信息并把它们缓存到本地并周期性地刷新服务状态。
1.创建Spring Boot工程,命名为eureka-server,并在pom中加入必要依赖,如下图:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.4.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent><dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka-server</artifactId>
</dependency><dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Camden.SR7</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
2.通过@EnableEurekaServer注解启动一个服务注册中心提供给其他应用进行对话。在Spring boot应用中添加这个注解就能开启此功能。
@EnableEurekaServer
@SpringBootApplication
public class EurekaServerApplication {
public static void main(String[] args) {
new SpringApplicationBuilder(EurekaServerApplication.class).web(true).run(args);
}
}
在默认情况下,该服务注册中心也会将自己作为客户端来尝试注册它自己,所以我们需要禁用它的客户端注册行为,只需在application.properties中增加如下配置:
spring.application.name=eureka-server
server.port=1111
eureka.instance.hostname=localhost
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
eureka.client.serviceUrl.defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka/
完成上面的配置,在浏览器中输入http:localhost:1111/,如图:
此时的Instances currently registered with Eureka栏是空的,因为还没有服务注册到注册中心。
我们可以直接使用上一章创建的Spring Boot应用加入到Eureka的服务治理体系中。
1.修改pom.xml,增加spring cloud eureka模块的依赖。如下:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency><dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Camden.SR7</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
2.修改HelloController类 在日志中打印服务的相关内容:
@RestController
public class HelloController{
private final Logger logger = Logger.getLogger(getClass());
@Autowired
private DiscoveryClient client;
@RequestMapping(value="/hello",method = RequestMethod.GET)
public String index() {
ServiceInstance instance = client.getLocalServiceInstance();
logger.info("/hello , host:"+ instance.getHost() + ", service_id:" + instance.getServiceId());
return "hello world";
}
}
3.在主类中添加@EnableDiscoveryClient注解,激活Eureka中的DiscoveryClient实现(自动化配置,创建DiscoveryClient接口针对Eureka客户端的EurekaDiscoveryClient实例)
@EnableDiscoveryClient
@SpringBootApplication@ComponentScan("com.microservice.web")//引号中填写Controller所在包名
public class SpringbootApplication {public static void main(String[] args) {
SpringApplication.run(SpringbootApplication.class, args);
}
}
4.修改application.properties文件:
spring.application.name=hello-service
eureka.client.serviceUrl.defaultZone=http://localhost:1111/eureka/
5.分别启动服务注册中心和hello-service服务。结果如下图:
通过访问localhost:8080/hello,直接向该服务发起请求,在控制台可以看到如下图所示:
这些输出的内容就是我们在controller中注入的DiscoveryClient接口对象,从服务注册中心获取的服务相关信息。
基于Spring Cloud的微服务构建学习-3 服务治理:Spring Cloud Eureka
标签:自定义 width blog 清单 返回 src 微服务 discovery type
原文地址:http://www.cnblogs.com/xiemubg/p/7353942.html