赞
踩
在微服务架构中,服务发现(Service Discovery)是关键原则之一。手动配置每个客户端或某种形式的约定是很难做的,并且很脆弱。Spring Cloud提供了多种服务发现的实现方式,例如:Eureka、Consul、Zookeeper。
Spring Cloud支持得最好的是Eureka,其次是Consul,最次是Zookeeper。
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <artifactId>microservice-discovery-eureka</artifactId> <packaging>jar</packaging> <parent> <groupId>com.itmuch.cloud</groupId> <artifactId>spring-cloud-microservice-study</artifactId> <version>0.0.1-SNAPSHOT</version> </parent> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka-server</artifactId> </dependency> </dependencies> </project>
/**
* 使用Eureka做服务发现。
* @author eacdy
*/
@SpringBootApplication
@EnableEurekaServer
public class EurekaApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaApplication.class, args);
}
}
server:
port: 8761 # 指定该Eureka实例的端口
eureka:
instance:
hostname: localhost # 指定该Eureka实例的主机名
client:
registerWithEureka: false
fetchRegistry: false
serviceUrl:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
# 参考文档:http://projects.spring.io/spring-cloud/docs/1.0.3/spring-cloud.html#_standalone_mode
上面我们构建出了一个简单的注册中心。但此时的Eureka是单点的,不适合于生产环境,那么如何实现Eureka的高可用呢?
--- spring: profiles: server1 # 指定profile=server1 server: port: 8761 eureka: instance: hostname: server1 # 指定当profile=server1时,主机名 client: serviceUrl: defaultZone: http://server2:8762/eureka/ # 将自己注册到server2这个Eureka上面去 --- spring: profiles: server2 server: port: 8762 eureka: instance: hostname: server2 client: serviceUrl: defaultZone: http://server2:8761/eureka/
java -jar microservice-discovery-eureka-0.0.1-SNAPSHOT.jar --spring.profiles.active=server1
java -jar microservice-discovery-eureka-0.0.1-SNAPSHOT.jar --spring.profiles.active=server2
如果注册中心是高可用的,那么各个微服务配置只需要将defaultZone 改为如下即可:
eureka:
client:
serviceUrl:
defaultZone: http://server1:8761/eureka/,http://server2:8762/eureka
参考资料:https://github.com/eacdy/spring-cloud-book
《Spring Cloud与Docker微服务实战》
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。